上传大文件报内存溢出错误OutOfMemory


最近一个项目要做大的视频文件的上传和下载。本来以前的项目框架里已经有现成的代码了,是用的springMVC文件上传下载的框架,但是以前都传的小文件,没什么问题,这次需要上传大文件,就老是报错了。


搜索原因的时候,发现好像这套框架是网络里面流传得比较广的,也算是bug吧,所以贴出来了。


可惜,看不到上传文件的源码,(因为源码在领导那里,他老人家太忙)。反正最后就是各种折腾,然后找到原因了的。


原因:


看了代码,FileManagerAction里面的上传方法,应该是先将文件传到tomcat服务器的一个临时文件里面,再通过spring包内置的FileCopyUtils.copy(srcMFile.getBytes(), descFile)方法,将它复制到所要上传到的目标文件夹去。


这个copy方法调用了commons-fileupload包里DiskFileItem类的get()方法,其中有一句代码是

byte[] fileData = new byte[(int) getSize()];

而这其中的getSize()方法的返回值是上文提到的copy方法的第一个参数srcMFile.getBytes()的值,也就是整个文件的大小的字节数。以前文件比较小的时候倒没什么关系,new了一个比较小长度的byte[]还能撑住,可是文件大了的时候,就不行了,就内存溢出了。


找到原因了要怎么解决呢,反正脑子是不够用了,所以就索性yahoo了一把。࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值