2

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と同じですか? 私は何を間違っていますか?

4

0 に答える 0