【问题标题】:Where does XMLHttpRequest.send() send uploaded files?XMLHttpRequest.send() 将上传的文件发送到哪里?
【发布时间】:2013-01-27 01:15:04
【问题描述】:

我的网站有点问题。我正在为我的一个朋友创建一个网站,让她可以在上面上传她的图纸。由于 XMLHttpRequest 对象的 .send() 方法,我使用异步上传。这是我的 JS 脚本:

var f             = file;
var name          = f.name;
var filesize      = f.size;

xhr.addEventListener("load" , function(e){
        location.reload();
});

xhr.open("post", 'import.php', true);
xhr.setRequestHeader('content-type', 'multipart/form-data');
xhr.setRequestHeader('type', f.type);
xhr.setRequestHeader('filename', name);
xhr.setRequestHeader('path', '<?php echo $path ?>');
xhr.send(f);

这是我保存上传文件的 PHP 页面:

extract($_SERVER);
$file = $HTTP_FILENAME;
$newPath = $HTTP_PATH;
$extension = explode('.',$file);
$extension = $extension[1];

if($extension == 'jpg' || $extension == 'zip'){

    exec('cd '.IMG_ROOT);
    $handle   = fopen($newPath.$file, "w+");
    /*
      Adding line after line the source file datas in the destination file
    */
    // Get the uploaded file
    $uploadedFile = fopen("php://input", "r+");

    if($uploadedFile)
    {
      while ($buffer = fgets($uploadedFile))
      {
        fwrite($handle, $buffer);
      }
    }
    fclose($handle);
    if($extension == 'zip'){
        $unzip = exec('which unzip');
        exec($unzip.' '.$newPath.$file);

        $rm = exec('which rm');
        exec('rm '.$newPath.$file);
    }
}

我的问题是,当我在 localhost 中测试它而不是在线时,它工作得非常好...... 似乎该文件从未发送过......谁能告诉我我是否做错了什么?和/或将我重定向到解释 send() 方法和文件发送位置的内容?

谢谢

【问题讨论】:

  • 不要提取超全局变量,避开exec 调用,并使用PHP 的zipfile deletion 设施。您还需要小心拉链炸弹。
  • 这是我的问题的答案还是只是一些关于编程的建议?无论哪种情况,谢谢,我会这样做:)但我认为这不会解决我的问题,即我无法检索我发送的上传文件...但是我所有的 php 变量都包含正确的数据...谢谢你的帮助:)

标签: ajax file-upload xmlhttprequest


【解决方案1】:

你的目标目录是可写的吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2015-08-17
    相关资源
    最近更新 更多