javascript - 文件上传302?

标签 javascript php web cpanel

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

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

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

我不确定从哪里开始进行故障排除,我将在下面放置 PHP 相关代码段。

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.");
    }
}

我应该设置请求 header 吗?我需要更改 php.ini 中的某些内容吗?我认为我的最大帖子大小是 32MB,不知道还有什么会影响这个。

最佳答案

302 是状态代码,而不是错误代码。这意味着服务器正在将您重定向到另一个页面。但状态为“正常”并已找到。

该问题通常是由于服务器开启了 mod-security 以及过滤引擎过滤上传而引起的。

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

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

关于javascript - 文件上传302?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39248123/

相关文章:

php - Mandrill 似乎正在破坏 MySQL Select

php - 通过 CURL 登录 htpasswd 并将 session 保留在浏览器中

javascript - 渐进式 Web 应用程序在性能方面与普通 Web 应用程序有何不同

javascript - 如何找出哪些 JavaScript 引擎/平台支持 ES6 Unicode 正则表达式的哪些功能?

javascript - js文件中web组件的继承

php - 服务器错误5006:供应商未指定重定向URL,但已指定URL

php - Paypal Webhook 响应

firefox - FireBug 数据传输大小

javascript - 显示加载 GIF 并在脚本加载后删除

javascript - 为我正在创建的网站实现 History.js 时遇到一些问题