Я пытаюсь загрузить большие файлы с помощью перетаскивания.У меня есть этот фрагмент кода Javascript:
xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('X-File-Name', file.name);
xhr.setRequestHeader('X-File-Size', file.size);
xhr.setRequestHeader('Content-Type', file.type);
xhr.send(file);
, где url
- строка целевого URL, а file
- Blob
(в соответствии с http://www.w3.org/TR/XMLHttpRequest2/#the-send-method), который я получилпосле перетаскивания файла. Этот код работает в Chrome 12, Safari 5 и Firefox 4 и отправляет необработанное содержимое файла в теле HTTP-запроса.
Однако, если файл достаточно большой,запрос никогда не отправляется. Вместо этого объект XMLHttpRequest
вызывает событие и выдает ошибку (без какого-либо полезного сообщения). В моей среде это ограничение составляет 86 МБ, но оно варьируется от компьютера к компьютеру.
Консоль javascript в Chromeпоказывает сообщение:
POST http://localhost/xfiles/xfiles.php undefined (undefined)
, которое не имеет никакого отношения к моему коду (которое отлично работает с файлами меньшего размера).
Похоже, что браузер читает весь файл в памяти и перед отправкойВероятно, есть исключение из-за нехватки памяти или что-то подобное, что останавливает процесс. В любом случае, HTTP-запрос не отправляется, поэтому наверняка пределы сервера не имеют ничегоg для решения этой проблемы.
В любом случае, чтение всего файла является пустой тратой ресурсов .
Есть ли способ отправить файл в потоковом режиме,байт за байтом, без необходимости сначала сохранять его в памяти?