如何在Jersey中获取上传文件的MIME类型

18

我在Jersey中有一个标准的上传端点:

@POST
@Secure
@Consumes("multipart/form-data")
public Response upload( @Context final HttpHeaders hh,
            @FormDataParam("fileaaa") final FormDataContentDisposition disposition,
            @FormDataParam("fileaaa") final InputStream input,

如何获取上传文件的MIME类型?

如果我使用 disposition.getType 这个函数,它会返回表单的MIME类型;在这种情况下是 form-data

我知道信息应该存在某个地方;HTTP消息应该是这样的:

-----------------------------7d01ecf406a6
Content-Disposition: form-data; name="input_text"

mytext

-----------------------------7d01ecf406a6
Content-Disposition: form-data; name="fileaaa";
filename="C:\Inetpub\wwwroot\Upload\pic.gif"
Content-Type: image/gif

(binary content)
-----------------------------7d01ecf406a6--
1个回答

37

我通过在我的方法中让Jersey注入一个BodyPart参数来解决了这个问题。对于body part使用getMediaType()就可以得到我需要的:

@POST
@Secure
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload(/*other parms */,  @FormDataParam("fileaaa") final FormDataBodyPart body) {
   String mimeType = body.getMediaType().toString();
   //handle upload
}

1
在这里重新提出一个已经死掉的问题,但是你是如何做到的呢?我遇到了同样的问题(试图使用URLConnection.guessContentTypeFromStream,但似乎在文本文件上失败),当我添加一个形式为[@FormDataParam("my_file") BodyPart body]的注入参数时,它只会被设置为空。 - Arkaaito
@Arkaaito 我有一段时间没有碰这个了,但是你看过你的端点的MultiPart参数吗?你不需要用FormDataParam前缀,你可以从中获取body部分。 - Cristian Vrabie
8
对于已接受的答案,BigRedBettaFish有一点要注意的地方,如果想要获取BodyPart,可以使用以下代码: @FormDataParam("my_file") FormDataBodyPart body 然后可以使用 body.getMediaType() - Peter O.
链接失效了。 - mdw7326
@mdw7326 是的,这个答案很老了,自那时以来他们已经改变了Jersey JavaDoc的位置。我更新到了一个更近期的版本。 - Cristian Vrabie
在 mimeType 中,*/* 是什么意思? - Faizan Mubasher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接