JavaScript に変換する必要がある AS コードがあります。現在、ほとんどのことは正常に機能していますが、(チャンクでの) アップロードのみが失敗します。サーバーから「ファイル サイズが異なります」というメッセージが返されます。javascript が生データを投稿する方法は、AS3 の FormData を使用した UrlRequest とは異なると思います。
例えば:
- AS3: urlRequest.data = [ByteArray]
- JS : Formdata.append('データ', [FileBlob] )
これは同じ結果になりますか?
AS3 コードは次のとおりです。
private function sendData() : void
{
this._filePieceReadyToUpload = false;
this._bytesToSend = new ByteArray();
this._fileStream.readBytes(this._bytesToSend, 0, this._fileStream.bytesAvailable);
this._currentOperation = this.OP_DATA;
this._urlRequest = new URLRequest(_uploadScriptPath + "?op=" + this.OP_DATA + "&secure=" + _loginSecureHash + "&user_id=" + _userId + "&crc=" + this._headerCRC + "&size=" + this._bytesToSend.length + "&position=" + this._piecePosition + "&md5=" + this._fileCurrent.$md5 + "&api_id=" + _apiID);
this._urlRequest.method = URLRequestMethod.POST;
this._urlRequest.data = this._bytesToSend;
this.startURLRequstLoadTimer();
return;
}
これに翻訳(javascript):
o.uploadFileBlob = function( blobFile, iBlobPos, sCrc )
{
var fd = new FormData();
fd.append( 'data', blobFile ),
xhr = new XMLHttpRequest(),
sGetVars = 'op=data'+
'&secure='+o.apik_secureHash+
'&user_id='+o.apik_userId+
'&crc='+sCrc+
'&size='+blobFile.size+
'&position='+iBlobPos+
'&md5='+
'&api_id=4';
xhr.upload.addEventListener("progress", function(e) { $d('progress'); }, false);
xhr.addEventListener("load" , function(e) { $d('upload complete'); }, false);
xhr.addEventListener("error", function(e) { $d('failed '+xhr.status+': '+xhr.statusText+' : '+xhr.responseText);
//alert( xhr.getAllResponseHeaders().toLowerCase() );
}, false);
xhr.addEventListener("abort", function(e) { $d('upload abort'); }, false);
xhr.open('POST', o.apik_address+'?'+sGetVars, true );
xhr.onload = function(e) { $d('xhr loaded'); };
return xhr.send(fd);
}
ASバージョンとJSバージョンの違いを誰かに説明してください。javascriptのPOSTフィールド「データ」は、ASのurlRequest.dataと同じですか? 私は何を間違っていますか?