«Возможно ли потоковое воспроизведение файла при загрузке по 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 все еще находится на панели сетевой отладки браузера, загруженные байты уже напечатаны:
(обратите внимание, что я используюДросселирование «быстрого 3G» для имитации медленной сети.)