Потоковая передача HTTP-сообщения multipart / form-data в zlib при загрузке? - PullRequest
0 голосов
/ 04 июня 2019

Фон

Я хочу уменьшить объем памяти и временное хранилище службы, которая берет файл, архивирует его и где-то хранит. Допустим, ограничение памяти составляет 4 ГБ, ограничение дискового пространства - 512 МБ, а обрабатываемых файлов - 10 ГБ.

Вопрос

  • Возможно ли потоковое воспроизведение файла при загрузке по HTTP через zlib (или где-то еще)? Или это ограничение протокола HTTP, что файл должен быть полностью загружен, прежде чем я смогу получить доступ к данным?

  • Где я могу прочитать об этом подробнее?

1 Ответ

1 голос
/ 05 июня 2019

«Возможно ли потоковое воспроизведение файла при загрузке по HTTP?»

- Да.Это то, что multipart/form-data делает с загрузкой файлов.Фактически, в соответствии с RFC7578 :

Тип мультимедиа / данные формы мультимедиа соответствует модели многочастных данных MIME потоков

"Или это ограничение протокола HTTP, что файл должен быть полностью загружен, прежде чем я смогу получить доступ к данным?"

- Нет. Вы можете получить доступ к данным каккак только загружено несколько байтов, и вам не нужно ждать завершения загрузки.Однако я не знаком с zlib и не уверен, может ли zlib использовать часть байтов файла.

Вы можете провести небольшой эксперимент, чтобы продемонстрировать это поведение «доступа к данным во время загрузки».Вот простой фрагмент веб-приложения Node.js, но вы можете реализовать этот пример с любой серверной технологией:

const Busboy = require('busboy');
router.post('/upload', function (req, res) {
  let busboy = new Busboy({headers: req.headers});
  busboy.on('file', function (fieldName, fileStream, fileName) {
    fileStream.on('data', function(data) {
      console.log(data);
    });
  })
})

После загрузки большого файла и отправки запроса POST /upload вы можете заметить, что: пока запрос HTTP все еще находится на панели сетевой отладки браузера, загруженные байты уже напечатаны:

enter image description here

(обратите внимание, что я используюДросселирование «быстрого 3G» для имитации медленной сети.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...