Dropbox API – 文件读取和上传node.js

我正在使用dropbox API从node.js文件结构读取文件,然后将该file upload到保pipe箱文件夹中。

文件被上传,但是其上传的文件的大小为0字节

var path = require("path"); var temp_dir = path.join(process.cwd(), 'pdf/'); if (!fs.existsSync(temp_dir)) fs.mkdirSync(temp_dir); fs.readFile(temp_dir + 'report.pdf', function read(err, data) { if (err) { throw err; } fileupload(data); }); 

file upload代码:

 function fileupload(name, content) { request.put('https://api-content.dropbox.com/1/files_put/auto/my_reports/report.pdf', { headers: { Authorization: 'TOKEN HERE', 'Content-Type': 'application/pdf' }, body: content }, function optionalCallback(err, httpResponse, bodymsg) { if (err) { console.log(err); } else { console.log("File uploaded to dropbox successfully!"); fs.unlink(temp_dir + 'report.pdf', function(err) { if (err) throw err; else { console.log("file deleted from server!"); } }) request.post('https://api.dropboxapi.com/1/shares/auto/MY_reports/report.pdf' + '?short_url=false', { headers: { Authorization: 'TOKEN HERE' } }, function optionalCallback(err, httpResponse, bodymsg) { if (err) { console.log(err); } else { console.log('Shared link 2 ' + JSON.parse(httpResponse.body).url); } }); } }); } 

上传的文件在保存箱中:

在这里输入图像说明

fileupload有两个参数: namecontent ,但是你只传递一个参数。 这意味着contentundefined ,这就是为什么你上传一个空的文件。

既然你实际上并没有使用name ,只要从fileupload的定义中删除这个参数:

 function fileupload(content) { ... 

请注意

您正在使用一年前弃用的Dropbox API v1,因此即将closures 。 您应该切换到API v2 。

您可以使用我的小型保pipe箱v2 api wrapper( dropbox-v2-api )快速上传文件:

 const dropboxUploadStream = dropbox({ resource: 'files/upload', parameters: { path: '/MY_reports/report.pdf' } }, (err, result) => { //upload completed }); fs.createReadStream(temp_dir + 'report.pdf').pipe(dropboxUploadStream);