1

.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
4

3 に答える 3

1

呼び出した後にヘッダーを設定してみてくださいxhr.open

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

for(var key in _headers) {
    xhr.setRequestHeader(key, _headers[key]);
}
于 2012-06-16T15:41:40.173 に答える
0

生のブロブ自体を送信しないようにしてください。代わりに 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);

それはあなたの問題を解決します。

于 2015-04-24T11:23:35.490 に答える
0

{ 'Content-Type' : 'multipart/form-data' }; を追加しないでください。ヘッダ。このようにして、境界やファイル名などのヘッダーなしでファイルを適切に取得する必要があります。画像、3gpp ファイルを正常に送信できましたが、ビデオ ファイルを送信すると、サーバーの PHP コード $_FILES が空の配列になります。$_FILES["files"]["error"] でさえ値がありません。ビデオファイルを送信するには、他のトリックが必要です。(チタン SDK 3.1.1 & アンドロイド 4.1.2)

xhr.open("POST", URL);
xhr.send({
   files : Titanium.Filesystem.getFile(Titanium.Filesystem.applicationDataDirectory, sourcefilename)
});
}
于 2013-07-02T12:03:52.370 に答える