3

現在、マルチパート/フォームデータ形式でアップロードしているファイルを必要とする(変更できない)サーバーにArrayBufferをアップロードしようとしています。 。サーバは、Content-Disposition部分から、保存されるfilenameを抽出し、Content-typeの下にファイルを提供するときに使用されるMIMEタイプを抽出する。現在、私はファイルをアップロードするには成功してる:XHRでFormDataとして渡されるBlobBuilderのファイル名を変更する

var xhr = new XMLHttpRequest(); 
var fdata = new FormData(); 
var bb; 

if (WebKitBlobBuilder) { 
    bb = new WebKitBlobBuilder(); 
} else if (MozBlobBuilder) { 
    bb = new MozBlobBuilder(); 
} else if (BlobBuilder) { 
    bb = new BlobBuilder(); 
} 

bb.append(obj.array); 

fdata.append('file', bb.getBlob("application/octet-stream")); 

xhr.open("POST", url, true); 
xhr.send(fdata); 

しかし、ブラウザは、たとえばChromeで、好きなようヘッダが送信されます。

Content-Disposition: form-data; name="file"; filename="blob" 
Content-Type: application/octet-stream; 

私は一時的に保存が企図しましたFileWriter APIを使用してファイルをアップロードしてアップロードしますが、それは正しくありません。

  • サーバーを変更することはできません、また私は別のサーバープロバイダを選択して喜んだ:答える

    、アカウントに取ります。

  • FirefoxとChromeで少なくとも動作する必要があります(私のアプリは2つのブラウザに限定されています)。

答えて

5

クロムの問題のおかげで、私はw3c標準ドラフトXMLHttpRequestの答えに私を指摘しました。

fdata.append('file', bb.getBlob("application/octet-stream")); 

に:基本的に私は変更する必要があります

fdata.append('file', bb.getBlob("application/octet-stream"), obj.filename); 

そして、それは望ましい結果を提供します。

+0

Firefoxでうまく動作していないようですが、バグを報告しました。[link [(https://bugzilla.mozilla.org/show_bug.cgi?id=736324) – Chazz

+0

私はすでに取り組んでいます:Bug 690659 https ://bugzilla.mozilla.org/show_bug.cgi?id = 690659(このパッチはすでに動作していますが、特定の処理方法にはいくつかの問題があります)。バグを複製しないでください。 – Chiguireitor

関連する問題