Я пытаюсь закачать большие файлы перетаскиванием.У меня есть этот фрагмент кода 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, а файл
- это 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-запрос не отправляется, поэтому очевидно, что ограничения сервера не имеют ничего общего с этой проблемой.
В любом случае, чтение всего файла является пустой тратой ресурсов .
] Есть ли какой-либо способ отправить файл в потоковом режиме, побайтно, без необходимости сначала сохранять его в памяти?