栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Java Servlet中流式传输大文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Java Servlet中流式传输大文件

如果可能,你不应将要提供的文件的全部内容存储在内存中。取而代之的是,为数据获取InputStream,并将数据分段地复制到Servlet OutputStream。例如:

ServletOutputStream out = response.getOutputStream();InputStream in = [ pre to get source input stream ];String mimeType = [ pre to get mimetype of data to be served ];byte[] bytes = new byte[FILEBUFFERSIZE];int bytesRead;response.setContentType(mimeType);while ((bytesRead = in.read(bytes)) != -1) {    out.write(bytes, 0, bytesRead);}// do the following in a finally block:in.close();out.close();

我确实同意toby,你应该改为“将它们指向S3 url”。

至于OOM异常,你确定它与提供图像数据有关吗?假设你的JVM具有256MB的“额外”内存,可用于提供图像数据。在Google的帮助下,“ 256MB / 200KB” =1310。对于2GB的“额外”内存(这些天的数量非常合理),可以支持10,000个并发客户端。即便如此,1300个并发客户端仍然是一个很大的数目。这是你经历的负载类型吗?如果不是,则可能需要在其他地方查找OOM异常的原因。

编辑-关于:

在这种情况下,图像可能包含敏感数据…

几周前阅读S3文档时,我注意到你可以生成可以附加到S3 URL的过期密钥。因此,你不必公开S3上的文件。我对这项技术的理解是:

  1. 初始HTML页面具有指向你的Web应用程序的下载链接
  2. 用户点击下载链接
  3. 你的Web应用程序会生成一个S3 URL,其中包含一个密钥,该密钥将在5分钟内过期。
  4. 使用步骤3中的URL将HTTP重定向发送到客户端。
  5. 用户从S3下载文件。即使下载时间超过5分钟,此方法仍然有效-下载开始后,它就可以继续完成。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/441914.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号