我正在尝试使用Dropbox API上传文件。以下是Dropbox中的documentation:
curl -X POST https://content.dropboxapi.com/2/files/upload \
--header "Authorization: Bearer <get access token>" \
--header "Dropbox-API-Arg: {\"path\": \"/Homework/math/Matrices.txt\",\"mode\": \"add\",\"autorename\": true,\"mute\": false}" \
--header "Content-Type: application/octet-stream" \
--data-binary @local_file.txt
我在Appcelerator项目中有这个:
var xhr = Titanium.Network.createHTTPClient();
xhr.onload = function(e) {
//My function
};
xhr.open('POST','https://content.dropboxapi.com/2/files/upload');
xhr.setRequestHeader('Authorization', 'My Key');
xhr.setRequestHeader('Content-Type', 'application/octet-stream');
xhr.setRequestHeader('Dropbox-API-Arg', '{"path":"/my_path/file.txt","mode":{".tag":"add"}}');
但我无法弄清楚如何发送数据二进制参数。使用我当前的代码,我可以在我的Dropbox文件夹中创建一个文件,但它只是一个空文件。
答案 0 :(得分:0)
从http://docs.appcelerator.com/platform/latest/#!/api/Titanium.Network.HTTPClient开始,您似乎只是将其传递到xhr.send()
。您可以传递字符串,对象(进行表单编码)或Titanium.Blob
。
(免责声明:我从未使用过Appcelerator,所以这就是我在阅读文档时所猜测的。)
答案 1 :(得分:0)
我想办法做到这一点。在我的情况下,我只需要上传一个简单的数据结构,所以我使用的是JSON对象:
var xhr = Titanium.Network.createHTTPClient();
xhr.onload = function(e) {
//My function
};
xhr.open('POST','https://content.dropboxapi.com/2/files/upload');
xhr.setRequestHeader('Authorization', 'My Key');
xhr.setRequestHeader('Content-Type', 'application/octet-stream');
xhr.setRequestHeader('Dropbox-API-Arg', '{"path":"/my_path/file.txt","mode":{".tag":"add"}}');
var my_json = {
"item1" : "content1"
};
xhr.send(JSON.stringify(my_json));
我仍然无法发送BLOB(如手机图库中的图片),但如果您传递文件的路径则可以使用:
var my_path = Titanium.Filesystem.getFile(Titanium.Filesystem.tempDirectory,'my_folder');
var newFile = Titanium.Filesystem.getFile(my_path.nativePath,'file.txt');
newFile.createFile();
newFile.write('Content of my text file');
var params = {"data-binary" : newFile};
xhr.send(params);