文件上传302?

时间:2016-08-31 11:14:48

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

我应该设置一个请求标头吗?它是php.ini中的东西我需要改变吗?我的最大帖子大小是我想32MB,不知道还有什么会影响这个。

1 个答案:

答案 0 :(得分:2)

var data = {}; // this is an object // if it should be an array write 'var data = [];' for( var i = 0; i < 5; i++ ) { data[i] = { Name : "Sample", Group : "Sample", Offering : "India", Type : "Employee", subject : "Sample", sponser : true }; for( var j = 1; j <= 12; j++ ) { // added 'var' before 'j' var val = "m" + j; data[i][val] = j; // added '[i]' after 'data' // changed '.val' to '[val]' // removed '+ 1' after 'j' } } console.log(data);是状态代码,而不是错误代码。这意味着服务器正在将您重定向到另一个页面。但状态OK和Found。

问题通常是由启用了302且过滤器引擎过滤上传的服务器引起的。

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

.htaccess