Я пытаюсь использовать busboy , чтобы разрешить клиентам загружать файлы на мой веб-сервер Express.
У меня есть следующая промежуточная функция, которую я использую для Express.
module.exports = (req, res, next) => {
req.files = {};
let busboy;
try {
busboy = new Busboy({
headers: req.headers
});
} catch (e) {
return next();
}
busboy.on("file", (fieldname, file, filename, encoding, mimetype) => {
req.files[fieldname] = {
file,
filename,
encoding,
mimetype
};
// Need to call `file.resume` to consume the stream somehow (https://stackoverflow.com/a/24588458/894067)
file.resume();
});
busboy.on("finish", next);
req.pipe(busboy);
};
Как видите, мне пришлось добавить file.resume();
, чтобы было вызвано событие "финиша", и вызвать функцию next
для промежуточного программного обеспечения (https://stackoverflow.com/a/24588458/894067).
.проблема, позже, когда я хочу использовать поток, он говорит readable: false
. Поэтому я предполагаю, что file.resume();
отбрасывает поток и не позволяет использовать его в будущем.
Я в основном хочу получить все загруженные файлы и информацию, связанную с этими файлами, сохранить их в объекте req.files
, затем использовать потоки позже или не использовать их, если я не хочу их использовать. Таким образом, они остаютсяпотоков и не занимают много памяти, пока я не буду готов использовать поток и фактически что-то с ним делать (или выбрать для его удаления).
Что я могу использовать вместо file.resume();
дляубедитесь, что событие «финиш» получает триггеры, апобудить меня использовать поток позже в жизненном цикле запроса (фактические маршруты app.post
вместо промежуточного программного обеспечения)?
Клиент также может загружать несколько файлов.Поэтому мне нужно любое решение для обработки нескольких файлов.