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>