2013-04-24 79 views
2

我正在使用Box的API版本2并尝试上载文件。我有Oauth 2所有的工作,但我无法进行实际上传。使用Node.js将文件从字符串上传到Box API

我正在使用Node.js和Express以及“请求”模块。我的代码看起来是这样的:

request.post({ 
    url: 'https://upload.box.com/api/2.0/files/content', 
    headers: { 
    Authorization: 'Bearer ' + authToken 
    }, 
    form: { 
    filename: ????, 
    parent_id: '0' 
    } 
}, function (error, response, body) { 
    // ... 
}); 

现在,我想上传到根文件夹,如果我理解正确的话,有“0”的ID。

我是什么真的不确定是什么值给“文件名”。我没有一个真正的文件可以读取,但是我有一个很长的字符串来表示我想上传的文件内容。

如何最好的应该上传这个“文件”?

回答

1

对于Box,我相信你想要使用请求多部分/表单数据实现。 它应该是这个样子:

var request = require('request'); 
var fs = require('fs'); 

var r = request.post(...); 
var form = r.form(); 
form.append('filename', new Buffer("FILE CONTENTS"), {filename: 'file.txt'}); 
form.append('parent_id', 0); 
+0

我试图这样做,但我仍然有一个“invalid_request_parameters”的错误。我不熟悉这个请求语法。什么都应该通过request.post? – brandly 2013-04-26 18:46:19

+0

此外,我已经检查出[这篇文章](http://stackoverflow.com/questions/13797670/nodejs-post-request-multipart-form-data)似乎是与框交互,虽然他们不提到它。他们使用'restler'模块,它看起来不错而且简单,但是我仍然不确定如何将字符串读作文件。 – brandly 2013-04-26 19:13:52

+0

我不使用框,但在文档快速织机,我认为你想要: { uri:'https://api.box.com/2.0/files/content', 标题:{ 授权:'Bearer'+ authToken } } – 2013-04-26 21:36:20

1
var fs = require('fs'); 
var request = require('request'); 
var path = require('path'); 

function requestCallback(err, res, body) { 
    console.log(body); 
} 

var accessToken = 'SnJzV20iEUw1gexxxxvB5UcIdopHRrO4'; 
var parent_folder_id = '1497942606'; 

var r = request.post({ 
    url: 'https://upload.box.com/api/2.0/files/content', 
    headers: { 'Authorization': 'Bearer ' + accessToken } 
    }, requestCallback); 

var form = r.form(); 
form.append('folder_id', parent_folder_id); 
form.append("filename", fs.createReadStream(path.join(__dirname, 'test.mp4')));