首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用formidable上传文件的进度

使用formidable上传文件的进度
EN

Stack Overflow用户
提问于 2020-02-17 16:30:08
回答 1查看 253关注 0票数 0

我正在使用node.js-expresss后端和可怕的包。我试图实现一个进度条,并决定使用formidable & websockets:

代码语言:javascript
复制
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请求中获取进度?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-18 17:55:07

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

代码语言:javascript
复制
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 })
    });
代码语言:javascript
复制
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60258489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档