Java Jax-rs - 仅获取负载中的文件 body - 删除 headers
Java Jax-rs - get only file body in payload - remove headers
我必须使用 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) {
....
}
但是我得到的文件中添加了 header 我不需要的详细信息。文件内容类似于:
----------------------------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>
我必须使用 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) {
....
}
但是我得到的文件中添加了 header 我不需要的详细信息。文件内容类似于:
----------------------------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>