Я использую node.js -экспресс-бэкэнд с огромным пакетом. Я попытался реализовать индикатор выполнения и решил использовать грозные & websockets:
const create = (req, res, io) => {
logger.debug(`EXEC create material`)
const form = new formidable.IncomingForm()
form.encoding = 'utf-8'
form.keepExtensions = true
form.multiples = true
form.maxFileSize = 600 * 1024 * 1024 // 600MB instead of 200MB (default value)
// form.uploadDir = `${__dirname}/uploads`
let oldValue = 0
form.on('progress', (bytesReceived, bytesExpected) => {
let currentValue = (parseFloat(bytesReceived) / parseFloat(bytesExpected)) * 100
if ((currentValue - oldValue) > 1 || currentValue === 100) {
oldValue = currentValue
io.emit('FILE_UPLOAD_STATUS', currentValue)
console.log('FILE_UPLOAD_STATUS', currentValue)
}
})
...
Однако, похоже, обрабатывать файлы и показывать прогресс после загрузки всех файлов? Файлы могут быть довольно большими, поэтому я вижу индикатор выполнения пустым в браузере до конца, когда он за действительно короткий промежуток времени превращается из 0% в 100%.
Должен ли я изменить свой код и получить прогресс из запроса xhr?