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

如果有人知道更好,请纠正我。

10-08 18:01