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

Dropbox API - File read & upload node.js

我正在使用保管箱 API 从 node.js 文件结构中读取文件,然后将该文件上传到保管箱文件夹中。

文件已上传,但上传文件的大小为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);
  });

文件上传代码:

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);

                        }
                    });

                }
            });
         }

上传到dropbox的文件:

fileupload 有两个参数:namecontent,但您只传递了一个参数。这意味着 contentundefined,这就是您上传空文件的原因。

由于您实际上并未使用 name,只需从 fileupload 的定义中删除该参数即可:

function fileupload(content) {
  ...

请注意

您使用的是 Dropbox API v1,它在一年多前就已弃用,现在是 due to be turned off soon. You should switch to API v2

您可以使用我的 tiny dropbox 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);