2017-08-16 78 views
0

我想先說說我已經搜索了很高和低的工作,並在這裏工作了整整一天,8小時,然後才訴諸問題。在大多數例子中,我看到沒有人看到端點api的樣子,所以我可以看到api的期望,所以我會同時顯示前端和後端。Angular 2將文件上傳到Java Api

myJavaRootResource.java

@POST 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@Produces(MediaType.APPLICATION_JSON) 
@Path("/import/{id}") 
public Response import(@FormDataParam("file") InputStream fileInputStream, @Context ServletContext application, 
     @Context HttpServletRequest request, @Context UriInfo info, @PathParam("id") Integer id) { 
    System.out.println("*** MADE it ***"); 
    ...blah blah... 
} 

現在在我的角2的代碼,我不知道如何發送它,我已經試過很多東西太多在這個問題覆蓋,所以我會後我最親近的嘗試。我有一個調用服務,使得這裏的呼叫的組件是服務功能

my.service.ts

importIt(id: number, myFile: File) { 
    const dataUrl = 'the/path/import/' + id; 

    const formData = new FormData(); 
    formData.append('file', myFile); 

    const headers = new Headers({'Content-Type': 'multipart/form-data'}); 
    let options = new RequestOptions({ 
     method: RequestMethod.Post, 
     headers: headers, 
    }); 

    return this.http.post(dataUrl, formData, options) 
     .map(res => res) 
     .catch(this.handleError.bind(this)); 

} 

現在,當我嘗試這個,我得到迴應400 - 錯誤的請求。有沒有人看到我可能會失蹤或有一個想法什麼修復。

我已經看到了這些鏈接,並沒有能夠把它一起

  1. File Upload with Angular 2 to rest api
  2. Angular post uploaded file
+0

可能是你已經嘗試過這一點,但無論如何,我會建議您單獨測試後端代碼通過一些其他客戶端(例如郵差),並確保後臺運行良好。然後,如果它無法嘗試交叉由前端執行的http請求,並將它們與之前使用的有效http請求進行比較。交集的東西也可以通過郵差完成。 –

+0

我認爲你的意思是攔截,而不是交集。 – AndreyS

+0

@AndreyS你是對的,謝謝。但我不能再改變評論 –

回答

1

於是我找到了解決我的問題

我刪除來自我的要求,它的工作。我不知道爲什麼,因爲api正在尋找這些標題。

my.service.ts

importIt(id: number, myFile: File) { 
    const dataUrl = 'the/path/import/' + id; 

    const formData = new FormData(); 
    formData.append('file', myFile); 

    let options = new RequestOptions({ 
     method: RequestMethod.Post 
    }); 

    return this.http.post(dataUrl, formData, options) 
     .map(res => res) 
     .catch(this.handleError.bind(this)); 
}