1

我已经对上传文件(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 中时,它可以很好地处理上传,只是我没有得到连续的上传响应。

4

0 回答 0