8

我一直在使用 Apache CXF 与 Jackson 一起使用和生成 JSON 文件的 web 服务工作。
但是,该服务的方法之一应该能够保存从移动应用程序上传的图像,该移动应用程序向我的网络服务发出多部分/表单数据 POST 请求,我不知道如何在我的语境。我们通常创建“请求”和“响应”对象来消费和生成 JSON,但是,恐怕这不适用于这种情况。

这是请求格式:

Content-type: multipart/form-data
"Description": text/plain
"Path": text/plain
"Image": image/jpeg

如何正确消费这种请求并在服务器端保存图像?


[编辑]

我设法通过使用这个来使用 multipart/form-data:

public returnType savePicture(
                @Multipart(value = "mode", type = "text/plain") String mode,
                @Multipart(value = "type", type = "text/plain") String type,
                @Multipart(value = "path", type = "text/plain") String path
                @Multipart(value = "image", type = "image/jpeg") Attachment image
            ) 
    {

但是,当尝试使用以下 POST 请求时:

Content-type: multipart/form-data, boundary=AaB03x

--AaB03x
content-disposition: form-data; name="mode"

T
--AaB03x
content-disposition: form-data; name="type"

M
--AaB03x
content-disposition: form-data; name="path"

c:/img/
--AaB03x
content-disposition: form-data; name="image"; filename="image.jpg"
Content-Type: image/jpeg
Content-Transfer-Encoding: binary

imgdata
--AaB03x--

我收到以下错误:

javax.ws.rs.BadRequestException: org.apache.cxf.jaxrs.utils.multipart.MultipartReadException: 没有找到内容 id类型的多部分,请求内容类型:multipart/form-data;boundary=AaB03x

例如,当我只使用mode时,它​​工作正常。它只会中断 2 个或更多参数。知道为什么这是错误的吗?

4

3 回答 3

1

我曾经遇到过类似的问题。

以下代码为我做了诀窍

@POST
@Consumes("multipart/form-data")
public void yourMethod(<params>) throws Exception {
}

简而言之,我认为@Consumes您缺少的注释。

于 2013-05-25T06:00:02.343 回答
0

看来我们发现了问题,和请求的格式有关。正确的格式应该是:

Content-type: multipart/form-data, boundary=AaB03x

--AaB03x
content-disposition: form-data; name="mode"

T--AaB03x

content-disposition: form-data; name="type"

M--AaB03x

content-disposition: form-data; name="path"

c:/img/--AaB03x

content-disposition: form-data; name="image"; filename="image.jpg"
Content-Type: image/jpeg
Content-Transfer-Encoding: binary

imgdata--AaB03x--

更改为这种格式允许我使用其他参数。

于 2013-03-21T19:18:07.917 回答
0

用于使用多部分表单数据。使用@consumes 标签并提供“multipart/form-data”以及值参数,例如

@Consumes(value = "multipart/form-data")

参考 https://jnorthr.wordpress.com/2012/07/10/http-header-content-type-and-encodings/

于 2015-06-16T04:48:17.737 回答