SpringBoot上传大文件并支持中途取消上传
上周遇到这样一个问题,客户上传高清视频(1G以上)的时候上传失败。 一开始以为是session过期或者文件大小受系统限制,导致的错误。 查看了系统的配置文件没有看到文件大小限制, web.xml中seesiontimeout是30,我把它改成了120。 但还是不行,有时候10分钟就崩了。 同事说,可能是客户这里服务器网络波动导致网络连接断开,我觉得有点道理。 但是我在本地测试的时候发觉上传也失败,网络原因排除。 看了日志,错误为: java.lang.OutOfMemoryError Java heap space 上传文件代码如下:public static String uploadSingleFile(String path,MultipartFile file) {if (!file.isEmpty()) {byte[] bytes;try {bytes = file.getBytes();// Create the file on serverFile serverFile = createServerFile(path,file.getOriginalFilename());BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(serverFile));stream.write(bytes);stream.flush();stream.close();logger.info("Server File Location="+ serverFile.getAbsolutePath());return getRelativePathFromUploadDir(serverFile).replaceAll("\\\\", "/");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println(e.getMessage());}}else{System.out.println("文件内容为空");}return null; } 乍一看没什么大问题,我在 stream.write(bytes); 这句加了断点,发觉根本就没走到。 而是在 bytes = file.getBytes(); 就报错了。 原因应该是文件太大的话,字节数超过Integer(Bytes[]数组)的最大值,导致的问题。 既然这样,把文件一点点的读进来即可。 修改上传代码如下:public static String uploadSingleFile(String path,MultipartFile file) {if (!file.isEmpty()) {//byte[] bytes;try {//bytes = file.getBytes();// Create the file on serverFile serverFile = createServerFile(path,file.getOriginalFilename());BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(serverFile));int length=0;byte[] buffer = new byte[1024];InputStream inputStream = file.getInputStream();while ((length = inputStream.read(buffer)) != -1) {stream.write(buffer, 0, length);}//stream.write(bytes);stream.flush();stream.close();logger.info("Server File Location="+ serverFile.getAbsolutePath());return getRelativePathFromUploadDir(serverFile).replaceAll("\\\\", "/");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println(e.getMessage());}}else{System.out.println("文件内容为空");}return null; }效果展示:
详细代码可以参考一下这篇文章:http://blog.ncmem.com/wordpress/2019/08/09/java%e5%a4%a7%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0/
SpringBoot上传大文件并支持中途取消上传相关推荐
- JavaScript上传大文件并支持中途取消上传
最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...
- python上传大文件s3_使用Python boto3上传Windows EC2实例中的文件至S3存储桶中
一.创建终端节点 为什么要创建终端节点,把VPC和S3管理起来呢?如果不将VPC和S3通过终端节点管理起来,那么VPC中EC2实例访问S3存储桶是通过公共网络的:一旦关联起来,那么VPC中EC2实例访 ...
- php 上传大文件400,PHP fastcgi模式上传大文件(大约有300多K)报错
最近在项目中中上传图片时,大约有300多K,结果报了个服务器错误,以前从未遇到过,错误的内容如下: mod_fcgid: HTTP request length 132296 (so far) exc ...
- 华为云服务器 大文件,云服务器上传大文件
云服务器上传大文件 内容精选 换一换 本节操作介绍本地MacOS系统主机通过安装"Microsoft Remote Desktop for Mac"工具向Windows云服务器传输 ...
- [转载自简书] ASPNetCore上传大文件碰到的一些问题总结
上传大文件碰到不少问题,总结一下. 先介绍一下功能:ajax上传文件到NetCore的web api接口, 安装在Linux服务器的服务端通过Nginx接受到后再存到文件服务器上. 如果文件不大,这个 ...
- 使用LFS解决GitHub无法上传大文件问题
使用LFS解决GitHub无法上传大文件问题 今天使用GitHub上传几个比较大的pdf电子书,有的大小超过100MB了,结果GitHub报错提示无法上传大于100MB的文件,报错信息如下: remo ...
- SpringBoot如何上传大文件
最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...
- Springboot + Vue实现大文件切片上传
Springboot + Vue实现大文件切片上传 大文件切片上传原理就是将一个大文件分成若干份大小相等的块文件,等所有块上传成功后,再将文件进行合并. 一.Springboot后端 1.实体TChu ...
- springboot上传大文件时内存溢出的可能解决办法
springboot上传大文件时内存溢出的可能解决办法 在springboot中上传大文件时要考虑内存的情况,一般我们会通过在执行服务时加入-Xms512m -Xmx512m等参数加大堆内存,但这是指 ...
最新文章
- 二进制搜索树_二进制搜索树数据结构举例说明
- linux操作系统上网,linux操作系统下无法上网
- Windows下为PHP安装redis扩展
- 【网络安全】如何使用QueenSono从ICMP提取数据
- 无锡易保Java面试笔试_易保面试题 - willim - BlogJava
- 【原】Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)...
- Android开发之将AndroidX项目改为非androidX(android.v7.support)的方法
- C#开发和使用中的23个技巧
- python-函数的位置参数
- 携程到底有没有杀熟?
- crc 校验错误_资深工程师:图说CRC原理应用及STM32硬件CRC外设
- Android Binder Driver流程分析
- 加班又如何,我要薅资本家羊毛《打工人的那些事》
- 2019杭电多校Problem 5 Snowy Smile题解
- linux shrink dev sd,Virt相关命令(转)
- 怎么给QT工程ui添加图片
- c语言电子时钟课程设计报告,电子时钟嵌入式课程设计报告
- c语言编程TLC2543AD采集,51单片机驱动12位AD转换TLC2543电路图+程序
- php限制一个函数在几分钟内不被调用_PHP - 无法在双引号内调用函数
- 国家地址json记录