【发布时间】:2015-03-07 17:43:03
【问题描述】:
我正在尝试使用 Jersey webservice 上传图片,我正在使用 jersey 客户端上传图片。 下面是泽西网络服务,它接受输入流并在服务器上上传图像。当我使用 jsp multipart form upload 直接调用它时它工作正常,但当我使用 jersey 客户端上传图像时失败
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail) throws ServiceException
{
// upload code
}
下面是 Jersey 客户端上传图片,客户端代码是另一个 web 服务的一部分,从 php rest 客户端调用,这个 jersey 客户端调用 jersey web 服务上传图片,如果我直接调用 jersey web 服务上传图片那工作很好,但是当我使用球衣客户端上传时它不起作用。
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
client.setChunkedEncodingSize(1024);
WebResource wr = client
.resource("http://localhost:8080/rest/upload");
String contentDisposition = "attachment; filename=\""
+ fileDetail.getName() + "\"";
FormDataMultiPart form = new FormDataMultiPart();
ContentDisposition contentDisposition2 = new ContentDisposition(contentDisposition);
form.setContentDisposition(contentDisposition2);
FormDataBodyPart fdp = new FormDataBodyPart("file",
uploadedInputStream, MediaType.MULTIPART_FORM_DATA_TYPE);
form.bodyPart(fdp);
ClientResponse response = wr.type(MediaType.MULTIPART_FORM_DATA).post(
ClientResponse.class, form)
请帮助我不确定我在这里缺少什么。 谢谢。
【问题讨论】:
-
你能解释一下“不工作”是什么意思吗?我使用您的确切代码进行了测试,使用
FileInputStream类型为uploadedInputStream,它工作正常。我会改变的一件事(虽然它并没有导致它对我来说失败)是MediaType.MULTIPART_FORM_DATA_TYPEforfdptoMediaType.APPLICATION_OCTET_STREAM_TYPE -
我的意思是它正在将 UploadedInputStream 传递给 jersey webservice,但它不包含我们从 jersey 客户端传递的相同块和相同内容类型。
-
form-data 是请求的主要内容类型。但是表单数据带有部分,每个部分都有自己的内容类型。该文件应该是八位字节流而不是表单数据
-
@peeskillet,你说得对,应该是 MediaType.APPLICATION_OCTET_STREAM_TYPE
标签: java jersey jax-rs jersey-client jersey-1.0