Java JAX-RS支持输入流吗?
给定以下HTML:Java JAX-RS支持输入流吗?,java,jax-rs,Java,Jax Rs,给定以下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> uploadeInputStream是否将作为JavaEEAPI规范
<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>
uploadeInputStream
是否将作为JavaEEAPI规范的一部分进行流式传输,而不是特定于实现?也就是说,我可以上传一个1TB的文件而不炸毁堆
我似乎找不到任何东西表明它是标准的,甚至对@消费(MediaType.MULTIPART\u FORM\u 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
请求?它将允许您从客户端直接访问输入流。我用千兆字节的数据进行了尝试,没有任何问题
如果有人知道得更清楚,请纠正我。多部分支持在JAX-RS中不是标准化的。您需要深入研究特定于实现的特性来处理它。好奇:servlet如何帮助您?在将文件上载转换为HttpServletRequest并传递给您或您正在使用的FileUpload API之前,它仍然是一个大型原始HTTP请求的一部分。我是否错过了JEE规范开发中允许您在请求已被处理后将其流式处理的内容?即使请求已被转换,它也已将其拆分并使用@MultipartConfig注释将其放入临时存储中。我已经更新了我的问题,以展示我将如何使用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);
}
}