Rathi
Rathi

Reputation: 71

File upload Http client issue Titanium

I am trying to upload a .mp4 file to some server. I am using the HTTP client provided by titanium. when I upload the file, HTTP client is adding some headers in the file due to which the file gets corrupted and cannot be played. When I download the uploaded file and open it in notepad I can see the header which are added to the file. What should I do so that these headers are not added to the file? Thanks a lot!

    // 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

Upvotes: 1

Views: 3171

Answers (3)

Ajit
Ajit

Reputation: 339

Try not sending the raw blob itself. Send base64 encoded string instead.

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

And try changing the header to

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

That will solve your problem.

Upvotes: 0

Girish Adiga
Girish Adiga

Reputation: 328

Do not add { 'Content-Type' : 'multipart/form-data' }; header. This way you should get the file properly without any headers like boundary and file name etc. I could send image, 3gpp file like that successfully But, when I send a video file, my server PHP code $_FILES will be empty array. Even the $_FILES["files"]["error"] have no value. There should some other trick to send video file. (Titanium SDK 3.1.1 & android 4.1.2)

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

Upvotes: 0

Aaron Saunders
Aaron Saunders

Reputation: 33345

try setting the headers after you call xhr.open

// open the client
xhr.open('POST',fileUploadUrl);

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

Upvotes: 1

Related Questions