繁体   English   中英

JAX-RS 是否支持输入流?

[英]Does JAX-RS Support Input Streaming?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM