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>

如果我有一个以以下开头的 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 请求吗?它将使您可以直接从客户端访问输入流。我用千兆字节的数据试过这个没有问题。

如果有人知道,请指正。

关于java - JAX-RS 是否支持输入流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32860561/

相关文章:

java - 根据Java列表中的最小属性值选择一个对象

Java - 找到匹配时数组比较不会终止?

java - WebSphere Portal 中与门户 URI 相关的内存泄漏

java - 为什么尽管类是可序列化的,但HashMap的哈希表标记为 transient

java - 在子请求中调用子资源方法?

java - 访问 Swagger ApiAuthorizationFilter 中的 @ApiOperation 属性

web-services - REST Web 服务的端点发布

java - 如何开始使用 JDK7

java - JAX-RS:解析服务器上链接资源的 URI

jboss - Wildfly 中的 JSON 序列化循环(无限递归)