文件上传端点需要关闭InputStream吗?

时间:2018-06-04 02:44:17

标签: java file-upload jersey jax-rs multipartform-data

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/upload")
public String upload(@FormDataParam("file") InputStream inputStream) {
    ...
    inputStream.close(); // necessary?
}

对于接受文件输入的API端点,我们是否需要手动关闭InputStream或框架是否为我们执行此操作?

我检查了Jersey docs,但找不到任何相关信息。

寻找可靠的来源或某种方式来验证它。

3 个答案:

答案 0 :(得分:0)

您有责任关闭InputStream。

泽西岛本质上不知道何时关闭你的小溪。

答案 1 :(得分:0)

1)在您使用InputStream之后,您可以认为关闭它是安全的。

2)您也可以使用Jersey ClosableService注册InputStream,根据其文档,它将为您关闭InputStream。 ClosableService

我希望有所帮助。

答案 2 :(得分:0)

我只是想知道同一件事,并在调试器中进行了尝试。泽西岛不会为您关闭视频流。

我认为最优雅的方法是使用try-with-resources,它可以从Java 9开始采用任意表达式并为您调用close()

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/upload")
public String upload(@FormDataParam("file") InputStream inputStream) {
...
try (inputStream) {
   //...
} catch (IOException e) {
   //...
}