2016-10-10 3 views
3

Я просто хочу задать этот вопрос: How does HTTP file upload work?. Это форма вопроса:Как загружается HTTP-файл для больших файлов?

<form enctype="multipart/form-data" action="http://localhost:3000/upload?upload_progress_id=12344" method="POST"> 
<input type="hidden" name="MAX_FILE_SIZE" value="100000" /> 
Choose a file to upload: <input name="uploadedfile" type="file" /><br /> 
<input type="submit" value="Upload File" /> 
</form> 

Что происходит, когда файл действительно большой (т. Е. 10 ГБ)? Включает ли браузер все данные в 1 запрос, а затем отправляет их на сервер? Как браузер читает файл и строит запрос (ы), когда у него всего 2 ГБ ОЗУ?

Скажем, файл CSV. Предполагая, что на сервере мало оперативной памяти и дискового пространства. Есть ли способ передать файл на сервер, чтобы сервер мог анализировать каждую строку, а не хранить весь файл в ОЗУ или диске?

Подробные объяснения очень оценены (HTTP, TCP и т.д.)

ответ

0

Вы можете найти некоторые подробности здесь:

Large file upload though html form (more than 2 GB)

В двух словах, удаленный сервер HTTP является то, что определяет максимальную размер HTTP POST. Все, что превышает его настроенный максимальный размер, и вы получите сообщение об ошибке.

Разработка собственного решения является одним из вариантов. Для вашего примера большого CSV-файла представьте HTTP POST, который отправляет 1 строку файла. Для 100 строк потребуется 100 HTTP POST.

Основным недостатком является то, что HTML-форму нельзя использовать напрямую. Возможно, JavaScript может обрабатывать сообщения для вас, таких, как изменение этого поста:

How to upload string as file with jQuery or other js framework

Вы бы иметь какую-то работу, чтобы сделать с обеих сторон, если порядок важен (т.е. послать какой-то номера последовательности как часть данных формы).

Есть и другие способы достижения этого. Но, надеюсь, вышеупомянутые предложения заставят вас думать.