我已经对上传文件(1.2 GB 大小)进行了编码,我需要知道上传的进度。我在节点 js 中使用多方模块来处理多部分文件。该模块具有某些事件,例如“进度”,“部分”等,我可以通过这些事件跟踪文件上传和处理。在 localhost 上,以下代码可以正常工作,并为每个上传的块提供 console.log() 和 res.write(),但是当我在 Azure Web App 服务中托管应用程序并查看日志时,console.log() 会停止在随机线上,经过一段时间后,它说请求被中止。
正如节点 js 中的文档在 [ https://nodejs.org/api/http.html#http_response_write_chunk_encoding_callback][1]中所说:“这会发送一个响应主体的块。可以多次调用此方法以提供连续的部分身体的。”
我假设我可以多次调用 res.write() ,这会将缓冲的信息发送到客户端(这在 localhost 但在 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 中时,它可以很好地处理上传,只是我没有得到连续的上传响应。