Загрузка больших файлов на сервер Node.JS с ограничением размера запроса - PullRequest
0 голосов
/ 15 января 2019

Ситуация:

У меня есть сервер Node.JS. NGINX ограничен размером запроса 5 МБ.

Мне нужно загрузить на сервер большие файлы (~ 15 МБ) с клиента, работающего в браузере.

Есть 3 экземпляра сервера, на котором работает БЕЗ разделяемой памяти / файловых систем.

Что я сделал:

Я использовал некоторые библиотеки, чтобы разбить файлы на куски (<5 МБ), отправив их на сервер. После успешной отправки последнего фрагмента на сервер клиент вызвал конечную точку сервера, чтобы сообщить о завершении, и затем произошло объединение фрагментов. Это работало, когда у меня был запущен один экземпляр сервера. Из-за распределения нагрузки и т. Д. Каждый запрос на отправку чанка может обрабатываться другим экземпляром сервера. Следовательно, фрагменты могут быть объединены неправильно. </p>

Решения, о которых я думал:

Наилучшим решением (на мой взгляд) было бы то, как передать чанки на сервер всего за один запрос, который обрабатывается только одним экземпляром сервера.

Stream API все еще экспериментальный. Я хотел бы попробовать, но не нашел хорошего примера для подражания. Я слышал, что Stream API на стороне клиента отличается от потока на Node.JS, и нужно сделать еще кое-что.

Я провел исследование Transfer-Encoding: chunked заголовка HTTP. Кто-то сказал, что отправлять большие файлы было бы хорошо, но я не нашел хорошего рабочего примера, как этого добиться.

Я также подумал о WebSocket (или даже Socket.io), чтобы установить соединение с экземпляром сервера и переслать фрагменты. Однако некоторые читатели сказали мне, что WebSocket не был хорошим способом отправки больших файлов.

Вопрос:

Как я могу достичь цели отправки больших файлов одному экземпляру сервера наиболее эффективным способом?

...