我终于让我的异步文件上传工作,除了它似乎只处理文本文件。
如果我上传文本文件,它会工作并保存文件。如果我上传了一个图片,它就会失败,因为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,不知道还有什么会影响这个。
答案 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