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
有两个参数: name
和content
,但是你只传递一个参数。 这意味着content
是undefined
,这就是为什么你上传一个空的文件。
既然你实际上并没有使用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);