我使用DropBox API上传文件。要将文件上传到Dropbox,我将执行以下步骤:
form
上传到服务器上的本地目录。fs.createReadStream
问题:
出于某种原因,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)
});
更新
const rp = require('request-promise-native');
答案 0 :(得分:2)
在大量头部刮伤和挖掘之前和之后,我有类似于这个问题的经历,无论如何,我能够解决这个问题。
对我来说,问题出现是因为createReadStream()的默认分块大小非常小64kb,这在某些情况下会在上传到Dropbox时产生影响。
因此解决方案是增加块大小。
// Try using chunks of 256kb
body: fs.createReadStream(`uploads/${req.file.originalname}`, {highWaterMark : 256 * 1024});
答案 1 :(得分:0)
https://github.com/request/request#streaming
我认为您需要将流管道传递给请求。