2013-06-26 7 views
5

大きなファイルをサーバー側にアップロードする必要があるプロジェクトに取り組んでいます。私はHTML5 FileReaderとjQueryを使ってファイルをチャンク(ArrayBuffer)でアップロードすることに決めました。ArrayBufferをjQuery経由で1つのAjax呼び出しで送信

チャンクをbase64文字列に変換し、jQuery.postからJSON形式のdataパラメータを使用してバックエンドサーバーに送信することで、このタスクを正常に終了しました。

$.ajax({ 
    url: "/Home/Upload", 
    type: "POST", 
    data: { 
     name: block.name, 
     index: block.index, 
     base64: base64 
    }, 
    processData: true 
}); 

例えば

しかし、base64で変換するには大きすぎるので、私はこのコードを最適化したいと思います。 $.ajaxで直接ArrayBufferを送信できるかどうかを知りたいです。

processData: falseを設定し、ArrayBufferをデータパラメータに入れると、サーバー側にRequest.InputStreamとして送信できることがわかりました。しかし、このように私はnameindexのような他のデータを付けることはできません。

生のArrayBuffer(またはblob、バイナリ)を別のデータ(名前、インデックス)と共にajax呼び出しで送信することができますか?

答えて

4

私はこの問題を解決したと思います。 FormDataを使用して、構造化データをファイルバイナリだけで1つの形式に変換できます。この

 
var blob = file.slice(block.start, block.end); 
// use formdata to send block content in arraybuffer 
var fd = new FormData(); 
fd.append("name", block.name); 
fd.append("index", block.index); 
fd.append("file", blob); 
$.ajax({ 
    url: "/Home/UploadInFormData", 
    data: fd, 
    processData: false, 
    contentType: "multipart/form-data", 
    type: "POST", 
    success: function (result) { 
     if (!result.success) { 
      alert(result.error); 
     } 
     callback(null, block.index); 
    } 
}); 

のようなコードは、サーバー側から私はRequest.Files[0]

からバイナリコンテンツながら Request.Formから私の構造化データを取得することができます
関連する問題