2013-12-09 54 views
4

我與上傳文件的形式,文字等的AppEngine上Blob存儲區:

$http({ 
    method: 'POST', 
    url: the_url, 
    transformRequest: formDataObject, 
    data: event, 
    headers: {'Content-Type': undefined} 
}) 

請求與follwing頭髮送成功

Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryYeRxOO7y3qHNWd83 

當我嘗試的內容類型設置爲"multipart/form-data;charset=UTF-8"我失去了邊界,並得到響應的錯誤:Bad content type. Please use multipart.

什麼是正確的方式來添加UTF-8℃ harset?

回答

4

根據RFC 1341:

As stated in the definition of the Content-Transfer-Encoding field, no encoding other than "7bit", "8bit", or "binary" is permitted for entities of type "multipart". The multipart delimiters and header fields are always 7-bit ASCII in any case, and data within the body parts can be encoded on a part-by-part basis, with Content-Transfer-Encoding fields for each appropriate body part.

所以,你必須在這種情況下使用Content-Transfer-Encoding而不是Content-Type

+0

我很困惑。我正在使用FormData附加方法https://developer.mozilla.org/en-US/docs/Web/API/FormData。我不知道如何/在哪裏設置Content-Transfer-Encoding。也許我需要base64編碼我的文本。 –

+0

將頭文件設置爲:'headers:{'Content-Transfer-Encoding':'utf-8'}'而不是現在擁有的。 –

+0

帶有標頭:{'Content-Transfer-Encoding':'utf-8'} 我得到: 拒絕設置不安全的標頭「Content-Transfer-Encoding」angular.js:6649 (匿名函數)angular.js: 6649個 q angular.js:203 (匿名功能)angular.js:6648個 ÿangular.js:6518 克angular.js:6252個 řangular.js:9042個 řangular.js:9042 (匿名功能)angular.js:9128 G $ EVAL angular.js:。9953 G $消化angular.js:9809 G $適用angular.js:10039 (匿名函數)angular.js:15394 (匿名函數)angular.js:2246 q angular.js:196 Nc.c –

3

我的解決辦法是不改變任何東西:

原來使用headers: {'Content-Type': undefined}是正確的。一切都在工作(我只改變了後端)。

麻煩的是,webob忽略了編碼,因此我認爲編碼是錯誤的。升級webob修復了這個問題。這是防不勝防的原因是因爲開發服務器默認使用新的WebOb而產量默認爲較舊的WebOb版本,因爲新版本並未app.yaml中指定爲:

libraries: 
- name: webob 
    version: "1.2.3" 
0

的字符集必須設置爲: Content-Type:multipart/form-data;邊界= ---- WebKitFormBoundaryYeRxOO7y3qHNWd83; charset = UTF-8