鉴于以下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,该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
请求吗?它将使您直接从客户端访问输入流。我尝试了千兆字节的数据,没有任何问题。
如果有人知道更好,请纠正我。