2012-08-23 82 views
7

我設計瞭如下一個多州的REST服務接收多請求(上傳文件),並保存在磁盤位置中的文件:澤西多部分客戶端上傳

@POST 
    @Path("/Upload") 
    @Produces(MediaType.TEXT_HTML) 
    @Consumes(MediaType.MULTIPART_FORM_DATA) 
    public String uploadFile(@FormDataParam("file") InputStream inputStream, 
      @FormDataParam("file") FormDataContentDisposition contentDisposition) { 

     System.out.println("Method Entry"); 
     System.out.println(contentDisposition.getFileName()); 


     String result = "not Success"; 
     File file = null; 
     if (contentDisposition != null 
       && contentDisposition.getFileName() != null 
       && contentDisposition.getFileName().trim().length() > 0) { 
      try { 
       file = new File("xx" 
         + contentDisposition.getFileName()); 
       new File("yy").mkdirs(); 
       file.createNewFile(); 
       OutputStream outputStream = new FileOutputStream(file); 
       int read = 0; 
       byte[] bytes = new byte[1024]; 

       while ((read = inputStream.read(bytes)) != -1) { 
        outputStream.write(bytes, 0, read); 
       } 
       outputStream.flush(); 
       outputStream.close(); 
       result = "success"; 

      } catch (Exception e) { 

       System.out.println(e.toString()); 
      } 
     } 
     System.out.println("Method Exit"); 
     return result; 

    } 

和我的測試客戶端是:

Client client = Client.create(); 
    WebResource resource = client 
      .resource("xyz"); 
    String conString = "This is the content"; 

    FormDataMultiPart formDataMultiPart = new FormDataMultiPart(); 
    formDataMultiPart.field("file", "Testing.txt"); 

    FormDataBodyPart bodyPart = new FormDataBodyPart("file", 
      new ByteArrayInputStream(conString.getBytes()), 
      MediaType.APPLICATION_OCTET_STREAM_TYPE); 
    formDataMultiPart.bodyPart(bodyPart); 

    String reString = resource.type(MediaType.MULTIPART_FORM_DATA) 
      .accept(MediaType.TEXT_HTML) 
      .post(String.class, formDataMultiPart); 
    System.out.println(reString); 

但我無法得到迴應。

當我使用HTML網頁作爲客戶端通過調用REST服務上傳文件,但是來自REST客戶端的文件不工作時,它完美地工作。

客戶端有什麼需要改變的嗎?

回答

1

當你說你無法得到答覆時,你的意思是什麼?

如果你發送一個文件,你可以試試這個嗎?

FileDataBodyPart fdp = new FileDataBodyPart("file",f,MediaType.APPLICATION_OCTET_STREAM_TYPE); 

此外,

formDataMultiPart.field("file", "Testing.txt"); 

不應該被命名爲 「文件」,但 「文件名」 爲例。

對於調試,我建議你使用Wireshark在服務器上收聽。

+0

誰能幫助我在添加新的頭上面的測試客戶端碼? – cxyz

11

解決這個,如果你沒有一個文件,但一些字符串左右,是做這樣的事情:

final FormDataMultiPart formDataMultiPart = new FormDataMultiPart(); 
final String value = "Hello World"; 
final FormDataContentDisposition dispo = FormDataContentDisposition// 
     .name("file")// 
     .fileName("test.txt")// 
     .size(value.getBytes().length)// 
     .build(); 
final FormDataBodyPart bodyPart = new FormDataBodyPart(dispo, value); 
formDataMultiPart.bodyPart(bodyPart); 
相關問題