2017-06-20 80 views
0

您好了很多關於此的帖子,但我找不到我的問題。使用JERSEY通過REST API上傳文件

我一直geeting錯誤400

這裏是我的代碼

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

這裏是我的球衣依賴

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

而且我已將此添加到AppConfiguration

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

平心而論,這可能是我的實際的HTTP請求,所以這裏是我的郵差

Postman bodypostman header

回答

0

//你可以請使用此代碼上傳倍數文件

@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代碼低於

<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

一個快速的方法。從您的方法中刪除@Consumes,並從郵遞員中刪除內容類型。這個對我有用。

不用擔心澤西島會認爲它是multipart form-data