Node.js 使用强大的

Node.js 使用强大的,node.js,express,formidable,Node.js,Express,Formidable,我正在使用node.js-expresss后端和强大的包。我尝试实现一个进度条,并决定使用强大的&websockets: const create = (req, res, io) => { logger.debug(`EXEC create material`) const form = new formidable.IncomingForm() form.encoding = 'utf-8' form.keepExtensions = true form.multi

我正在使用node.js-expresss后端和强大的包。我尝试实现一个进度条,并决定使用强大的&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请求中获得进度?

最后我决定将其成功地移动到浏览器内部的js。使用axios是处理进度最简单/最快的方法。这是我感兴趣的代码(React应用程序):


请输入前端代码。该频道没有接收到任何内容?根据官方文档,它应该在处理每个成功的区块后发送更新。其他答案也提到了这一点,
((ByteReceived*100)/bytesExpected)
。频道接收数据,但在一段时间后什么也不做。似乎当form.on.progress被触发时,所有文件都已上载,但未由服务器处理。所以进度会被触发,但与文件上传表单相比它运行得如此之快。对吗?这怎么可能呢。
axios.request({
      method: "POST",
      url: `${PRIVATE_API_ROOT}/materials`,
      data: formData,
      headers: { Authorization: `Bearer ${token}` },
      onUploadProgress: ProgressEvent => {
        this.setState({
          progressStatus: parseFloat(ProgressEvent.loaded / ProgressEvent.total * 100).toFixed(2),
        })
      }
    }).then(data => {
      this.setState({
        progressStatus: 100,
        loading: false,
        error: ''
      })
    }).catch(function (error) {
      //handle error
      this.setState({ error: error.message })
    });
```