2016-05-12 80 views
0

我正在爲下面的post調用設置邊界,但在chrome上,邊界看起來與我所設置的不同。如何讓我的自定義邊界「--test」顯示在請求負載上?

------ WebKitFormBoundaryB5LjM2a6Qly3Xruj 內容處置::對鉻

var url = '/site/apkUpload'; 
    var deferred = $q.defer(); 
    console.log(formdata); 
    $http.post(url, formdata, { 
     processData: false, 
     headers: {'Content-Type': "multipart/form-data; charset=utf-8; boundary='--test'", 
      'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
      'x-access-token': token, 
      'cache-control': 'max-age=0'} 
    }) 
     .success(function (response) { 
      deferred.resolve(response); 
     }) 
     .error(function (reject) { 
      deferred.reject(reject); 
     }); 
    return deferred.promise; 

請求有效載荷格式數據; name =「packageName」

helo1 ------ WebKitFormBoundaryB5LjM2a6Qly3Xruj Content-Disposition:form-data; name =「name」

......

非常感謝!

+0

快速的問題不談,爲什麼你在$ http返回Promis時創建/返回一個promise? –

+0

您可能需要使用變壓器。這將允許您將請求有效負載的原始值設置爲字符串。例如'$ http.post(url,data,{transformRequest:myTransformer})'' – rob

回答

0

我可以解釋在兩個方面你的問題:

  1. 你是說你爲什麼沒有得到------ WebKitFormBoundaryB5LjM2a6Qly3Xruj在POST請求頭,你在請求​​得到有效載荷。我有同樣的問題,同時發送多部分FORMDATA使用$ http.post(我也用FormData)。該解決方案是使用$ HTTP(配置。爲了我的理解$ HTTP。後底層使用$ http()本身生成XMLHttpRequest對象,它應該運行多部分/表單數據編碼算法來設置有效負載和頭中的多部分邊界。在$ http.post,似乎每當你給一個自定義的配置對象,它會覆蓋算法生成的頭。 This答案也是有幫助的。
  2. 如果你只是想在內容頭添加自定義多邊界,那麼你就可以做到這一點通過在配置對象添加tranformRequest功能:

    var url = '/site/apkUpload'; 
    var deferred = $q.defer(); 
    console.log(formdata); 
    $http.post(url, formdata, { 
        processData: false, 
        transformRequest: function (data, headers) { 
         var boundary = yourCustomLogic(); 
         headers()['Content-Type'] = 'multipart/form-data;charset=utf- 
         8;boundary=' + boundary; 
        }, 
        'Accept': ..., 
        'x-access-token': token, 
        'cache-control': 'max-age=0' 
    }) 
    .success(function() {...}); 
    
相關問題