Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAX-RS支持输入流吗?_Java_Jax Rs - Fatal编程技术网

Java JAX-RS支持输入流吗?

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规范

给定以下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规范的一部分进行流式传输,而不是特定于实现?也就是说,我可以上传一个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);
    }
}