У меня есть код файла загрузки (размер 1,2 ГБ), и мне нужно знать, как происходит загрузка. Я использую многопартийный модуль в node js для составного файла. В модуле есть определенные события, такие как «прогресс», «часть» и т. Д., С помощью которых я могу отслеживать загрузку и обработку файла. на localhost следующий код работает отлично и предоставляет console.log () и res.write () для каждого загруженного чанка, но когда я размещаю приложение в сервисе Azure Web App и вижу журналы console.log ( ) останавливается на произвольной строке и через определенное время сообщает, что запрос отменен.
Как сказано в документе в node js в [https://nodejs.org/api/http.html#http_response_write_chunk_encoding_callback] [1] : «Это отправляет кусок тела ответа. Этот метод может вызываться несколько раз для предоставления последовательных частей тела. "
Я предполагаю, что могу вызвать функцию res.write () несколько раз, что отправит буферизованную информацию клиенту (который работает так, как я хочу, на локальном хосте, но в сервисе приложения Azure) ПРИМЕЧАНИЕ. Я изменяю пределы тайм-аута запроса в процессе, чтобы он не превышал время загрузки.
form.on('progress' , function(bytesReceived, bytesExpected) {
console.log('Upload is in progress... Processed bytes: ' + bytesReceived)
res.write('Processed bytes ' + bytesReceived + '\n')
timeOutMilliSecond += 60000
req.setTimeout(timeOutMilliSecond)
res.setTimeout(timeOutMilliSecond)
})
form.on('field', (name,value) => {
containerName = value
})
form.on('part' , function(dataPart) {
if(dataPart.filename){
try{
blobService.createBlockBlobFromStream(containerName, dataPart.filename, dataPart, dataPart.byteCount, function(error, response){
if(error){
console.log(error)
res.end(error)
}
console.log("Uploaded")
res.end('Blob successfully uploaded')
})
}catch(err){
console.log("Error occurred in processing the part " + err)
}
}
dataPart.on('error' , (err) => {
console.log('Error in data procesing ')
})
})
form.on('close' ,() => {
console.log('Form closed')
})
form.on('abort', () => {
console.log('Request aborted')
})
form.on('error', (err) => {
console.log('Form processing error ')
})
form.parse(req)
на локальном хосте это выглядит так:
Upload is in progress... Processed bytes: 16317362
Upload is in progress... Processed bytes: 16382898
Upload is in progress... Processed bytes: 16448434
Upload is in progress... Processed bytes: 16513970
Upload is in progress... Processed bytes: 16579506
Upload is in progress... Processed bytes: 16645042
Upload is in progress... Processed bytes: 16710578
Upload is in progress... Processed bytes: 16776114
Upload is in progress... Processed bytes: 16841650
Upload is in progress... Processed bytes: 16907186
Upload is in progress... Processed bytes: 16972722
Upload is in progress... Processed bytes: 16998316
Uploaded
Form closed
но на Azure это выглядит так
0|index | Upload is in progress... Processed bytes: 1280013
0|index | Upload is in progress... Processed bytes: 1345549
0|index | Upload is in progress... Processed bytes: 1411085
0|index | Upload is in progress... Processed bytes: 1476621
0|index | Upload is in progress... Processed bytes: 1542157
0|index | Upload is in progress... Processed bytes: 1558541
0|index | Error in data procesing
0|index | Error: Request aborted
0|index | at IncomingMessage.onReqAborted (/node_modules/multiparty/index.js:190:17)
0|index | at IncomingMessage.emit (events.js:198:13)
0|index | at abortIncoming (_http_server.js:450:9)
0|index | at socketOnClose (_http_server.js:443:3)
0|index | at Socket.emit (events.js:203:15)
0|index | at TCP._handle.close (net.js:607:12)
0|index | Form processing error
0|index | Error: Request aborted
0|index | at IncomingMessage.onReqAborted (/node_modules/multiparty/index.js:190:17)
0|index | at IncomingMessage.emit (events.js:198:13)
0|index | at abortIncoming (_http_server.js:450:9)
0|index | at socketOnClose (_http_server.js:443:3)
0|index | at Socket.emit (events.js:203:15)
0|index | at TCP._handle.close (net.js:607:12)
Но самое смешное, когда я удаляю строку res.write () и разверните это в Azure он отлично справляется с загрузкой, просто я не получаю последовательных ответов на загрузку.