Отправить файл с помощью XmlHttpRequest: Streaming?

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

В любом случае, чтение всего файла является пустой тратой ресурсов .

] Есть ли какой-либо способ отправить файл в потоковом режиме, побайтно, без необходимости сначала сохранять его в памяти?

13
задан linepogl 23 June 2011 в 12:58
поделиться