2017-06-20 4 views
0

Hallo habe ich viele Beiträge darüber gesehen, aber ich kann mein Problem nicht finden.Hochladen von Datei über REST API mit JERSEY

Ich halte geeting einen Fehler 400

Hier ist mein Code

POST 
@Path("/upload") 
@Consumes({MediaType.MULTIPART_FORM_DATA}) 
public Response uploadFile( @FormDataParam("file") InputStream fileInputStream, 
           @FormDataParam("file") FormDataContentDisposition fileMetaData) throws Exception 
{ 
    System.out.println(fileMetaData.getFileName()); 

    return Response.ok("File caught successfully !!").build(); 
} 

Hier sind meine Jersey Abhängigkeiten

 <dependency> 
      <groupId>org.glassfish.jersey.core</groupId> 
      <artifactId>jersey-server</artifactId> 
      <version>2.25</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-multipart</artifactId> 
      <version>2.25</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet-core</artifactId> 
      <version>2.18</version> 
     </dependency> 

Und ich habe diese

@Override 
public Set<Class<?>> getClasses() { 
    Set<Class<?>> resources = new java.util.HashSet<>(); 
    addRestResourceClasses(resources); 
    resources.add(MultiPartFeature.class); 
    return resources; 
} 
zum AppConfiguration hinzugefügt

In aller Fairness, könnte es meine eigentliche HTTP-Anforderung sein, ist so hier mein Postbote

Postman bodypostman header

Antwort

0

// könnten Sie bitte diesen Code verwenden, um ein Vielfaches Dateien

@Path("/files") 
     @POST 
     @Consumes(MediaType.MULTIPART_FORM_DATA) 
     public Response uploadFiles2(@DefaultValue("") @FormDataParam("tags") String tags, 
       @FormDataParam("files") List<FormDataBodyPart> bodyParts, 
       @FormDataParam("files") FormDataContentDisposition fileDispositions, 
       @FormDataParam("file2") InputStream file2, 
       @FormDataParam("file2") FormDataContentDisposition fileDisposition2) { 

      StringBuffer fileDetails = new StringBuffer(""); 

      /* Save multiple files */ 

      for (int i = 0; i < bodyParts.size(); i++) { 
       /* 
       * Casting FormDataBodyPart to BodyPartEntity, which can give us 
       * InputStream for uploaded file 
       */ 
       BodyPartEntity bodyPartEntity = (BodyPartEntity) bodyParts.get(i).getEntity(); 
       String fileName = bodyParts.get(i).getContentDisposition().getFileName(); 

       saveFile(bodyPartEntity.getInputStream(), fileName); 

       fileDetails.append(" File saved at /Volumes/Drive2/temp/file/" + fileName); 
      } 

      /* Save File 2 */ 

      String file2Name = fileDisposition2.getFileName(); 

      saveFile(file2, file2Name); 
      fileDetails.append(" File saved at /Volumes/Drive2/temp/file/" + file2Name); 
      fileDetails.append(" Tag Details : " + tags); 

      System.out.println(fileDetails); 

HTML-Code laden wird unter

<form action="/upload/files" enctype="multipart/form-data" method="post"> 
     <label>Select multiple files</label><input type= "file" name="files" multiple /> <br/><br/> 
     <label>Select File</label><input type= "file" name="file2" /> <br/><br/> 
     <label>Tags</label> <input name="tags" maxlength="10"/> <br/><br/> 
     <input type="submit" title="Save"/> 
    </form> 
0

ein schneller Weg. Entfernen Sie @Consumes von Ihrer Methode und entfernen Sie auch Inhaltstyp vom Postboten. Für mich geht das.

keine Sorge Jersey wird es als multipart form-data

betrachten
Verwandte Themen