Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Проблемы с XMLHttpRequest Level 2


Автор: barcelona 19.7.2011, 08:31
Здравствуйте!
Пытаюяь загружать файлы через XMLHttpRequest Level 2, и с большими файлами (больше 60Mb) возникли проблемы. Получаю следующее:

Fatal error</b>: Allowed memory size of 209715200 bytes exhausted (tried to allocate 71899100 bytes)

Размер выделяемой памяти на тестовом сервере 200 Mb, а на реальных хостингах может быть и меньше. Не знаю, можно ли как-то обойти эту проблему. Может быть дело не в JS-коде, а в настройках web-сервера? Мой код: 
Код

<form id="myform" name="myform">
  <input type="file" name="failik" id="failik" onchange="sendFile(this.form);">
</form>

<div id="uploadProgress"></div>
<script type="text/javascript">
<!--
  function sendFile(form) {
    var files = document.getElementById("failik").files;
    
    for (var i = 0; i < files.length; i ++) {
      file = files[i];
      var name = file.fileName != null ? file.fileName : file.name;
      var size = file.fileSize != null ? file.fileSize : file.size;
                     
      var xhr = new XMLHttpRequest();
                           
      xhr.upload.onprogress = function(e){
          if (e.lengthComputable){
              var value = Math.round(e.loaded / e.total * 100);
              var text = value + '% from ' + e.total;
              document.getElementById("uploadProgress").innerHTML = text;
          }
      };
      
      xhr.onreadystatechange = function(){            
          if (xhr.readyState == 4) {
              alert(xhr.responseText);                   
          }
      };
      
       xhr.open("POST", "/do-nothing.php?file=" + name, true);
       xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
       xhr.setRequestHeader("X-File-Name", encodeURIComponent(name));
       xhr.setRequestHeader("Content-Type", "application/octet-stream");
       //Я пробовал так
       var formData = new FormData();
       formData.append(name, file);
       xhr.send(formData);
      //И так
      var formData = new FormData(form);
      xhr.send(formData);
      //И так
      xhr.send(file);
      //Результат один - одна и та же ошибка
    }
  }
//-->
</script>

Автор: barcelona 19.7.2011, 10:45
На http://habrahabr.ru/blogs/javascript/120917/  в конце статьи приведён пример отправки файла на сервер по частям. Пусть будет работать не везде, но хоть что-то. Только смутило замечание в конце статьи: "Скрипт сборки файла на сервере не прикладываю — там все очевидно.". Мне как раз не очевидно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)