【问题标题】:File upload 302?文件上传302?
【发布时间】:2017-01-07 22:57:15
【问题描述】:

我终于让我的异步文件上传工作了,除了它似乎只处理文本文件。

如果我上传一个文本文件,它会工作并保存文件。如果我上传图像,它会失败,firebug 报告响应具有 302 状态,并且我被发送到我的 public_html 的根目录

我认为这可能与文件大小有关,但似乎并非如此,因为我使文本文件大于图像,并且成功了。

我不知道从哪里开始排查,我把PHP相关的sn-p放在下面。

PHP

$fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME']:false);
echo $fn;

try{
    file_put_contents("upload/".$fn, file_get_contents("php://input"));
    //echo file_get_contents("upload/".$fn);
}catch(exception $e){
    echo $e->getMessage();
}

JS

function UploadFile(file){
    var xhr = new XMLHttpRequest();
    //on the below if
    //xhr.upload: returns a XMLHttpRequestUpload Object, I believe just to check if it's supported in broswer
    if (xhr.upload){
        xhr.open("POST","http://domain.com/absolutepath/what.php",true);
        xhr.setRequestHeader("X-FILENAME",file.name);

        xhr.onreadystatechange = function(){
        if(xhr.status == 200 && xhr.readyState == 4){
            callback(xhr.responseText);
        }
    }
    xhr.send(file);
    }else{
        alert("Sorry, don't think this is supported in your browser.");
    }
}

是否有我应该设置的请求标头?我需要更改 php.ini 中的内容吗?我的最大帖子大小是 32MB,不知道还有什么影响。

【问题讨论】:

标签: javascript php web cpanel


【解决方案1】:

302 是状态码,而不是错误码。这意味着服务器正在将您重定向到另一个页面。但状态为 OK 和 Found。

此问题通常是由于服务器打开了mod-security 并且过滤器引擎过滤了上传。

要解决此问题,请将此代码添加到您的主机帐户的 .htaccess 文件中(如果您是客户端),或者如果您是管理员则在 apache 配置中进行编辑:

<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>

【讨论】:

  • 您可能走在正确的道路上。在我的托管帐户上更改它并没有改变任何东西,我会回到我的虚拟主机,看看他们是否可以提供帮助。还有更多我可以阅读的内容吗?
  • 是的,搜索有关 mod_security 的上传错误。 Google上有大量文章。尝试在您的本地主机中测试关闭。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 2020-10-29
  • 2012-03-30
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
相关资源
最近更新 更多