Загрузка файла AJAX с помощью XMLHttpRequest

Я знаю, что есть много подобных вопросов, но я до сих пор не нашел решения для моего проблема. Я пытаюсь загрузить файл с помощью 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;
};

. И это сработало, но только с размерами файлов около 8 МБ. Когда я пытаюсь отправить файл размером более 8 МБ,var $_FILES['file']снова становится пустым

ПРИМЕЧАНИЕ. :переменная 'file' соответствует чему-то вроде document.getElementsById ('fileInput' ).files[0];

5
задан Danilo Valente 28 June 2013 в 09:12
поделиться