2

我有一段必须翻译成 javascript 的 AS 代码。大多数事情现在都可以正常工作,但只有上传(分块)失败。我从服务器“不同的文件大小”收到一条消息。我认为 javascript 发布原始数据的方式与带有 FormData 的 AS3 的 UrlRequest 不同。

例如:

  • AS3:urlRequest.data = [字节数组]
  • JS : Formdata.append('data', [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