2017-06-23 23 views
3

我正在開發一個圖形界面,使用不同的服務rest(用java編寫)。 我要調用這樣的服務:

@PUT 
@Path("nomeServizio") 
public Response nomeServizio(final FormDataMultiPart multiPart) { 
......} 

呼叫服務:

service: function (data) { 

      return $http({ 
       url: PATH_REST_SERVICES + '/nomeServizio', 
       headers: {"Content-Type": "multipart/form-data"}, 
       data: data, 
       method: "PUT" 
      }); 
     } 

當我從Angularjs服務文件要求,我得到:錯誤400(錯誤請求)如果服務有Content-Type = multipart/form-data

雖然我得到一個415(不支持的媒體類型)錯誤,如果服務有一個Content-Type =「application/x-www-form-urlencoded; charset = utf-8」或「application/json; charset = utf-8」或「application/form-data」。

我正在開發javascript和html5的前端,我沒有找到任何可以幫助我的表單,因爲FormDataMultiPart對象在javascript中不存在。

我試圖格式化以多種方式發送數據,但它總是返回400或415

我應該如何格式化數據發送到REST調用?

Content-Type應該如何在頭文件中?

回答

3

如何使用AngularJS $ HTTP來發送FormData

FormData interface提供了一種輕鬆構建一組鍵/值對錶示發送表單域和它們的值,然後可以使用XHR Send方法輕鬆發送。如果編碼類型設置爲multipart/form-data,它將使用格式將使用的相同格式。

var formData = new FormData(); 

formData.append('type', type); 
formData.append('description', description); 
formData.append('photo', photo); 

return $http({ 
    url: PATH_REST_SERVICES + '/nomeServizio', 
    headers: {"Content-Type": undefined }, 
    data: formData, 
    method: "PUT" 
}); 

將內容類型標題設置爲undefined很重要。通常,$http service將內容類型設置爲application/json。當內容類型爲undefined時,XHR API將自動使用正確的multi-part boundary將內容類型設置爲multipart/form-data

0
在Java代碼中

你需要像這樣寫代碼:

@POST 
@Path("/upload") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response uploadFile(
    @FormDataParam("file") InputStream uploadedInputStream, 
    @FormDataParam("file") FormDataContentDisposition fileDetail) { 

更多可以參考波紋管例如與鏈接: -

https://www.mkyong.com/webservices/jax-rs/file-upload-example-in-jersey/

+0

問題是我無法更改我使用的其他服務。 我應該找到一個解決方案,允許我在FormDataMultiPart中格式化(使用javascript或php)數據。 –