2017-08-16 4 views
0

Ich möchte damit beginnen, indem ich sage, ich habe hoch und niedrig gesucht und arbeitete für einen ganzen Tag, 8 Stunden, bevor Sie eine Frage stellen. In den meisten Beispielen, die ich gesehen habe, zeigt niemand, wie der Endpoint-API aussieht, damit ich sehen konnte, was die API erwartete, also werde ich sowohl das Front- als auch das Backend zeigen.Angular 2 Upload-Datei nach 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... 
} 

Jetzt in meinem Angular-2-Code Ich habe keine Ahnung, wie es zu schicken, ich habe zu viele Dinge versucht, viele in dieser Frage zu bedecken, so werde ich meine nächste Post Versuch. Ich habe eine Komponente, die einen Service aufruft, die den Anruf hier macht, ist, dass der Service-Funktion

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)); 

} 

Wenn ich jetzt versuchen, diese erhalte ich eine Antwort 400 - Bad Request. Sieht jemand was ich vermisse oder habe eine Idee was zu beheben ist.

Ich habe diese Links gesehen und nicht in der Lage gewesen, um es zusammen

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

Sie dies bereits versucht werden, aber trotzdem würde ich Ihnen vorschlagen, Ihre Backend-Code separat über einige Rest-Client (zB Postman) und stellen Sie sicher, dass das Backend funktioniert gut zu testen . Wenn es nicht hilft, versuchen Sie, die vom Frontend ausgeführten http-Anfragen zu überschneiden und vergleichen Sie sie mit einer gültigen http-Anfrage, die Sie zuvor benutzt haben. Schnittpunkte könnten auch über Postman gemacht werden. –

+0

Ich denke, du meintest Abhören, nicht Schnittpunkt. – AndreyS

+0

@AndreyS du hast Recht, danke. Aber ich kann den Kommentar nicht mehr ändern –

Antwort

1

So fand ich eine Lösung für mein Problem

I entfernt die Header von meiner Anfrage und es hat funktioniert. Ich habe keine Ahnung warum, weil die API diese Header sucht.

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)); 
}