给定以下 HTML:
<form action="upload" method="post" enctype="multipart/form-data">
Select a file : <input type="file" name="file" size="45" />
<input type="submit" value="Upload" />
</form>
如果我有一个以以下开头的 JAX-RS 方法:
@POST
@Path("upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload(
@FormParam("file") InputStream uploadedInputStream) {
...
}
uploadedInputStream
是否将作为 Java EE API 规范 的一部分进行流式处理,而不是特定于实现?那就是我可以上传 1TB 的文件而不会炸毁堆?
我似乎找不到任何表明它是标准的东西,甚至对 @Consumes(MediaType.MULTIPART_FORM_DATA)
的支持也是特定于实现的。
要让它跨应用服务器工作,我唯一能想到的就是使用如下所示的 servlet,它会显示上传的字节数。
@WebServlet("/upload")
@MultipartConfig
public class ImportServlet extends HttpServlet {
@Override
protected void doPost(final HttpServletRequest req,
final HttpServletResponse resp) throws ServletException,
IOException {
int c = 0;
InputStream cis = req.getPart("file").getInputStream();
int ch = cis.read();
while (ch != -1) {
++c;
ch = cis.read();
}
cis.close();
resp.getWriter().print(c);
}
}
最佳答案
据我所知,多部分数据流被加载到磁盘,然后为您打包。你能更愿意用户直接 PUT
请求吗?它将使您可以直接从客户端访问输入流。我用千兆字节的数据试过这个没有问题。
如果有人知道,请指正。
关于java - JAX-RS 是否支持输入流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32860561/