createReadStream不工作/大文件速度极慢

Sky*_*ker 6 javascript node.js express dropbox-api

我使用DropBox API上传文件.要将文件上传到Dropbox,我将执行以下步骤:

  1. 首先将文件上传form到服务器上的本地目录.
  2. 使用从本地目录读取文件 fs.createReadStream
  3. 通过Dropbox API将文件发送到Dropbox.

问题:

由于某种原因fs.createReadStream,在阅读和上传大文件时需要绝对年龄.现在我要上传的文件只有12MB,这不是一个大文件,上传/处理12MB文件大约需要18分钟.

我不知道问题出在哪里createReadStream或者dropbox api代码.

它适用于大小不等的文件kb.

我的代码:

let options = {
    method: 'POST',
    uri: 'https://content.dropboxapi.com/2/files/upload',
    headers: {
        'Authorization': 'Bearer TOKEN HERE',
        'Dropbox-API-Arg': "{\"path\": \"/test/" + req.file.originalname + "\",\"mode\": \"overwrite\",\"autorename\": true,\"mute\": false}",
        'Content-Type': 'application/octet-stream'
    }, 

      // I think the issue is here.
      body: fs.createReadStream(`uploads/${req.file.originalname}`)
};

 rp(options)
    .then(() => {
        return _deleteLocalFile(req.file.originalname)
    })
    .then(() => {
        return _generateShareableLink(req.file.originalname)
    })
    .then((shareableLink) => {
        sendJsonResponse(res, 200, shareableLink)
    })
    .catch(function (err) {
        sendJsonResponse(res, 500, err)
    });
Run Code Online (Sandbox Code Playgroud)

更新:

const rp = require('request-promise-native');
Run Code Online (Sandbox Code Playgroud)

Gle*_*len 3

在经过大量的摸索和挖掘之前和之后,我有过与此问题类似的经历,无论如何,就我而言,我能够解决这个问题。

对我来说,问题的出现是因为 createReadStream() 的默认分块大小非常小,只有 64kb,并且由于某种原因,这在上传到 Dropbox 时产生了连锁反应。

因此,解决方案是增加块大小。

// Try using chunks of 256kb
body: fs.createReadStream(`uploads/${req.file.originalname}`, {highWaterMark : 256 * 1024});
Run Code Online (Sandbox Code Playgroud)