2015-10-05 130 views
0

我以前曾問過類似的情況,但這裏有些微不同的情況和更多細節。如何使用angularJS發送多部分/表單數據的POST請求?

我有在其上接受的multipart/form-data的POST請求服務器側的處理程序。請求包含POST參數數量和一個應包含圖像文件的參數(最後一個參數可能存在或可能不存在)。如何使用angularJS發送這樣的請求?

我試過的選項數(所有的人都因爲知道沒有文件上傳),但他們沒有工作。我得到了錯誤的結果,因爲HTTP請求中沒有Content-Type:multipart/form-data,或者從基於Jetty的Spark Web服務工具中得到異常(請不要混淆Apache Spark),這聽起來像是「。 .. 「缺少初始的多部分邊界...」 - 根據請求細節

我已經試過這樣:

return $http({ 
      method: 'POST', 
      url: editCompanyUrl, 
      headers: {'Content-Type': 'multipart/form-data'}, 
      data: { 
       token: token, 
       userId: userId, 
       companyId: companyId, 
       companyName: $scope.companyName, 
      }, 
      timeout: 500 
     }).then(function (data) { 
      console.log(data); 
      //Store Company ID which is used for saving purposes 
      //localStorage.setItem("companyId", data.data.Company.id); 
      return data.data.Company; 
     }, function (data) { 
      console.log(data); 
     }) 

這對於例如

return $http({ 
      method: 'POST', 
      url: editCompanyUrl, 
      headers: {'Content-Type': undefined}, 
      data: { 
       token: token, 
       userId: userId, 
       companyId: companyId, 
       companyName: $scope.companyName, 
      }, 
      timeout: 500 
     }).then(function (data) { 
      console.log(data); 
      //Store Company ID which is used for saving purposes 
      //localStorage.setItem("companyId", data.data.Company.id); 
      return data.data.Company; 
     }, function (data) { 
      console.log(data); 
     }) 

可否請你。幫助?發送多部分請求的正確方式是什麼?

謝謝。

親切的問候,阿爾喬姆。

回答

0

$ HTTP提供了一個選項:PARAMS

使用PARAMS:中代替數據:

 $http({ 
      url: url, 
      method: "POST", 
      params: { 
      token: token, 
      userId: userId, 
      companyId: companyId, 
      companyName: $scope.companyName, 
      }, 
     }).success(function(data, status, headers, config) { 
      //SUCCESS 
      }). 
     error(function(data, status, headers, config) { 
      //ERROR 
     }); 
+0

嗨薩科!感謝您的回答,但是如何添加對multipart/form-data的支持?有時(取決於代碼的變化)在POST之前還有一個額外的OPTIONS請求(據我所知它與CORS有關) - 如何避免它?謝謝。 –

+0

嘿@ArtemVorobyev,首先,它現在在工作嗎?然後,選項是如何跨源資源共享標準要求瀏覽器的行爲,這不是一個錯誤:)!你想避免它什麼? – Nicolas2bert

0

,你能否告訴我們完整的錯誤。還有你的服務器端代碼。要獲得星火多部分內容,你必須在你的服務器端使用:

MultipartConfigElement multipartConfigElement = new MultipartConfigElement("Yourstoragedirectory"); 
    request.raw().setAttribute("org.eclipse.jetty.multipartConfig", multipartConfigElement); 
    System.out.println(request.raw().getPart("file")); 

還要確保您有最新版本的火花。

相關問題