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
有两个参数:name
和 content
,但您只传递了一个参数。这意味着 content
是 undefined
,这就是您上传空文件的原因。
由于您实际上并未使用 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);
我正在使用保管箱 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
有两个参数:name
和 content
,但您只传递了一个参数。这意味着 content
是 undefined
,这就是您上传空文件的原因。
由于您实际上并未使用 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);