2012-08-23 86 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); 
相关问题