【发布时间】:2012-05-15 13:28:24
【问题描述】:
我知道有很多类似的问题,但我仍然没有找到解决我的问题的方法。 我正在尝试使用 XMLHttpRequest 上传文件,因此我开发了以下代码:
var sendFiles = function(url,onload,onerror,file,headers){
var xhr = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHttp'),
upload = xhr.upload;
API.addEvent(xhr,'readystatechange',function(){
if(xhr.readyState==4)
if((xhr.status>=200 && xhr.status<300) || xhr.status==304){
this.response = this.response || this.responseText;
onload.call(xhr);
}else onerror.call(xhr);
});
xhr.open('POST',url,true);
for(var n=0;n<headers.length;n++)
xhr.setRequestHeader(headers[n]);
xhr.send(file);
return xhr;
};
而 PHP 端的脚本是:
<?php
header('Content-type: text/html;charset=ISO-8859-1');
$status = 0;
if(@copy($_FILES['file']['tmp_name'],'test\\' . $_FILES['file']['name']))
$status = 1;
else
$err = '0';
echo '{
"status": ' . $status . '
}';
?>;
但是 var $_FILES['file'] 似乎是空的,这意味着文件没有被发送到服务器。 然后我决定在下面的代码中使用 FormData 对象
var sendFiles = function(url,onload,onerror,file,headers){
var xhr = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHttp'),
upload = xhr.upload,
formData = new FormData();
formData.append('file',file);
API.addEvent(xhr,'readystatechange',function(){
if(xhr.readyState==4)
if((xhr.status>=200 && xhr.status<300) || xhr.status==304){
this.response = this.response || this.responseText;
onload.call(xhr);
}else onerror.call(xhr);
});
xhr.open('POST',url,true);
for(var n=0;n<headers.length;n++)
xhr.setRequestHeader(headers[n]);
xhr.send(formData);
return xhr;
};
它确实有效,但文件大小只有 8mb 左右。当我尝试发送大小超过 8mb 的文件时,var $_FILES['file'] 再次变为空
注意:“文件”变量对应于类似 document.getElementsById('fileInput').files[0];
【问题讨论】:
-
你的ini文件上传文件大小限制是多少?
标签: javascript ajax file upload xmlhttprequest