我必须使用UI/Postman客户端将二进制文件上传到我的服务器。我的Rest API后端代码是:
@POST
@Produces({JSONHeaders.MEDIA_TYPE_JSONAPI, MediaType.APPLICATION_JSON})
@Path("loadLicense")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response loadLicense2(@ApiParam("load a license") File input) {
....
}
但我得到的文件中添加了标题详细信息,我不需要。文件内容类似于:
----------------------------013134317098674079511595^M
Content-Disposition: form-data; name="file"; filename="license.lic"^M
Content-Type: application/octet-stream^M
^M
^@^@^T.^@^@m.....^@^@^@^K^@^A^@^@^@^@^C^@^@^@(^@.^E^@^@^@^K^@.^@^@^@^G.^@^@^@^K^@.^@^@^@^@^B^@^@^@^K^@.^@^@^@^@^@^@^@^@^K^@.^@^@^@^@^F^@^@^@^K^@.^@^@^
^@^@^@^U^@^N^BGR^@^@^@^@^M^@^G^Bc^@^@^@^@^K^@^O^B1.0^@^@^@^@^Q^@4^Bpermanent^@^@^@^@^G^@.
^G.^V......I..^HC_.^^.^U...Y..G.^K.R.^?^O&..^.{V.Z.......h^B.<^O....w'#bk.^B]..*...8.W93...Z...... ..g.a+.....,^M
----------------------------013134317098674079511595--^M
但我只需要二进制内容。有办法做到这一点吗?
注意:我尝试了@FormParam-它不起作用,我得到了这个错误The @FormParam is utilized when the content type of the request entity is not application/x-www-form-urlencoded]
已尝试@FormDataParam-无法在代码中解析它。
您可能需要使用@FormDataParam
而不是@FormParam
,这取决于您如何通过Postman发送数据。它们有不同的用途,即用于不同的MIME类型:
-
@FormParam
用于MIME类型application/x-www-form-urlencoded
(常量MediaType.APPLICATION_FORM_URLENCODED
( -
@FormDataParam
用于multipart/form-data
(常数MediaType.MULTIPART_FORM_DATA
(
以下代码段期望通过表单数据发送文件:
@POST
@Produces({JSONHeaders.MEDIA_TYPE_JSONAPI, MediaType.APPLICATION_JSON})
@Path("loadLicense")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response loadLicense2(
@FormDataParam("file") InputStream istream,
@FormDataParam("file") FormDataContentDisposition disp) {
}
输入流包含二进制数据,第二个参数为您提供有关上传文件的一些信息,例如文件名。
你需要jersey-media-multipart
工件:
https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-multipart
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>3.0.2</version>
</dependency>