如何在Titanium Appcelerator中指定数据二进制文件?

时间:2016-03-18 02:22:44

标签: upload dropbox appcelerator appcelerator-titanium

我正在尝试使用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文件夹中创建一个文件,但它只是一个空文件。

2 个答案:

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