开发者社区> 问答> 正文

java 文件下载出错 java.lang.OutOfMemoryError: ?400报错

java 文件下载出错 java.lang.OutOfMemoryError: Java heap space? 400 报错

文件比较大 100M,有没有大哥帮忙分析下

 

	public static void download(String path, HttpServletResponse response) throws Exception {
		try {
			File file = new File(path);
			if (file.exists()) {
				String filename = file.getName();
				response.reset();
				response.setHeader("Content-Disposition","attachment;filename=" + new String(filename.getBytes(), "iso-8859-1"));
				response.setContentType("application/octet-stream");
				response.setHeader("Content-Length", "" + file.length());
				InputStream is = new BufferedInputStream(new FileInputStream(file));
				OutputStream os = new BufferedOutputStream(response.getOutputStream());
				byte[] buffer = new byte[1024 * 10];
				int len = -1;
				while ((len = is.read(buffer)) != -1) {
					os.write(buffer, 0, len);
				}
				os.flush();
				os.close();
				is.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

 

展开
收起
爱吃鱼的程序员 2020-06-02 17:07:34 853 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    断点续传

    ######

    每次从文件里面读取N个字节,返回……一次性读完,太浪费内存

    ######关键词:copy on write######每5M fllush一次。######

    问题找到了,有个过滤器会把所有response 的数据转成ByteArrayOutputStream

    ######因为拦截的处理嘛,涉及IO流感觉都需要单独弄个服务来支撑。。。要不上传或下载的并发大一点,就会内存不够######积累一定量记得flush######

    有没有屌大的说下现实场景中你们都是如何处理的?

    2020-06-02 17:10:08
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载