文件上传Http客户端问题Titanium

时间:2012-06-16 13:22:13

标签: titanium appcelerator titanium-mobile appcelerator-mobile

我正在尝试将.mp4文件上传到某个服务器。我正在使用钛提供的HTTP客户端。当我上传文件时,HTTP客户端正在文件中添加一些标题,因为文件被损坏而无法播放。当我下载上传的文件并在记事本中打开它时,我可以看到添加到文件中的标题。 我应该怎么做才能将这些标题添加到文件中? 非常感谢!

    // CODE
var uploadFile = Titanium.Filesystem.getFile(dir, _previewUrl);
var fileUploadUrl = 'Some Url for the server to upload';
var headers = { 'Content-Type' : 'multipart/form-data' };
var content = { 'file' : uploadFile };
var xhr = Titanium.Network.createHTTPClient();
for(var key in _headers) {
        xhr.setRequestHeader(key, _headers[key]);
    }
xhr.onerror = function(e)
{
Ti.UI.createAlertDialog({title:'Error', message:e.error}).show();
Ti.API.info('IN ERROR ' + e.error);
};
xhr.setTimeout(20000);
xhr.onload = function(e)
{
Ti.UI.createAlertDialog({title:'Success', message:'status code ' + this.status}).show();
Ti.API.info('IN ONLOAD ' + this.status + ' readyState ' + this.readyState);
};
xhr.onsendstream = function(e)
{
ind.value = e.progress ;
Ti.API.info('ONSENDSTREAM - PROGRESS: ' + e.progress);
};
// open the client
xhr.open('POST',fileUploadUrl);
// send the data
xhr.send(content);
// END

3 个答案:

答案 0 :(得分:1)

尝试拨打xhr.open

后设置标题
// open the client
xhr.open('POST',fileUploadUrl);

for(var key in _headers) {
    xhr.setRequestHeader(key, _headers[key]);
}

答案 1 :(得分:0)

不要添加{'Content-Type':'multipart / form-data'};头。这样你应该正确地获取文件,没有像边界和文件名等任何标题。我可以成功发送图像,3gpp文件但是,当我发送视频文件时,我的服务器PHP代码$ _FILES将是空数组。即使$ _FILES [“files”] [“error”]也没有价值。应该有一些其他技巧来发送视频文件。 (Titanium SDK 3.1.1& android 4.1.2)

xhr.open("POST", URL);
xhr.send({
   files : Titanium.Filesystem.getFile(Titanium.Filesystem.applicationDataDirectory, sourcefilename)
});
}

答案 2 :(得分:0)

尝试不发送原始blob本身。改为发送base64编码的字符串。

var uploadFile = Titanium.Filesystem.getFile(dir, _previewUrl);     
var base64File = Ti.Utils.base64encode(uploadFile.read()).toString();

尝试将标题更改为

xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(base64File);

这将解决您的问题。