如何使用dropbox.js将file upload到Dropbox?

原版的

我有问题使用官方dropbox.js从Node.js上传文件(图片)到Dropbox。 我想上传我在另一台服务器上的图片。 例如,使用dropbpox图标(www.dropbox.com/static/images/new_logo.png)。

client.writeFile(file, 'www.dropbox.com/static/images/new_logo.png', function(error, stat) { if (error) { return es.send(error.status); // Something went wrong. } res.send("File saved as revision " + stat.revisionTag); }); 

我知道这只是创build一个带有url的文本文件,但是我怎样才能将图片上传到Dropbox? 我也尝试使用http.get下载文件,然后将其上传到保pipe箱,但不起作用。

谢谢。

更新信息

首先,我用下面的代码从远程URL下载图像:

 var request = http.get(options, function(res){ var imagedata = '' res.setEncoding('binary') res.on('data', function(chunk){ imagedata += chunk }) res.on('end', function(){ console.log("Image downloaded!"); fs.writeFile(local, imagedata, 'binary', function(err){ if (err) throw err console.log('File saved.') }) }) }) 

该文件被正确保存。 然后,我发现事情:

发送'imagedata'到Dropbox:

  console.log("Image downloaded!"); client.writeFile(file, imagedata, function(error, stat) { if (error) { return response.send(error.status); // Something went wrong. } response.send("File saved as revision " + stat.revisionTag); }); 

有些东西上传到Dropbox,但没有用。

然后,我也尝试从光盘读取文件,然后将其发送到Dropbox,但它也不工作:

 fs.readFile(file, function(err, data) { 

使用dropbox-js 0.9.1-beta1或更高版本从node.js上传二进制文件。 你需要传递它的Buffer或者ArrayBuffer实例。 试试这个代码:

 var req = http.get(options, function(res) { var chunks = []; res.on('data', function(chunk) { chunks.push(chunk); }); res.on('end', function() { console.log("Image downloaded!"); var imageData = Buffer.concat(chunks); client.writeFile(file, imageData, function(error, stat) { if (error) { return response.send(error.status); } response.send("File saved as revision " + stat.revisionTag); }); }); }); 

“`

原始答案:dropbox-js README提到二进制文件在node.js中不起作用。

我也有问题,我只是复制并修改了旧的Dropbox节点npm(现在已弃用),但我在dropbox.js上添加了以下function。

 Client.prototype.writeFileNodejs = function(path, data, callback) { var self = this; fs.readFile(data.path, function(err, data) { if (err) return callback(err); var uri = "" + self.urls.putFile + "/" + (self.urlEncodePath(path)); if (typeof data === 'function') callback = data, data = undefined; var oauth = { consumer_key: self.oauth.key , consumer_secret: self.oauth.secret , token: self.oauth.token , token_secret: self.oauth.tokenSecret }; var requestOptions = { uri: uri, oauth: oauth }; requestOptions.body = data; return request['put'](requestOptions, callback ? function(err, res, body) { if (err) return callback(err); var contentType = res.headers['content-type']; // check if the response body is in JSON format if (contentType === 'application/json' || contentType === 'text/javascript') { body = JSON.parse(body); if (body.error) { var err = new Error(body.error); err.statusCode = res.statusCode; return callback(err); } } else if (errors[res.statusCode]) { var err = new Error(errors[res.statusCode]); err.statusCode = res.statusCode; return callback(err); } // check for metadata in headers if (res.headers['x-dropbox-metadata']) { var metadata = JSON.parse(res.headers['x-dropbox-metadata']); } callback(null, body, metadata); } : undefined); }); }; 

以及你想要求和FS做这个。

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