Jersey Multipart客户端上传

我设计了一个多部分Jersey 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客户端无法正常工作时,它工作正常。

在客户端有什么必须改变的吗?

对此的解决方案,如果你没有文件,但有一些String左右,就是做这样的事情:

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

当你说你无法得到回应时,你的意思是什么?

如果您发送文件,可以试试吗?

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

也,

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

不应该命名为“file”,而应该命名为“filename”。

为了进行调试,我建议您使用Wireshark在服务器上进行监听。