2011-12-13 52 views
3

我目前正在嘗試上傳一個ArrayBuffer到一個服務器(我無法更改),該服務器期望我以多部分/表單數據格式上傳文件。服務器從Content-Disposition部分提取將被保存的filename部分,並在Content-type下提供將在服務文件時使用的MIME類型。目前,我成功的上載文件:更改BlobBuilder中的文件名,作爲XHR上的FormData傳遞

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上運行(我的應用程序僅限於這兩種瀏覽器)。

回答

5

剛剛解決了它,這要感謝Chromium問題,我指出了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 2012-03-16 00:05:25