springmvc多用户同时上传文件到服务器

1、环境 myeclipse2014 、tomcat7、ubuntu

2、springMVC相关jar包,sdk1.2.6.jar,

3、项目运行在远程虚拟机ubuntu上,文件上传到阿里百川多媒体下。

4、问题:

4.1、单个或几个客户同时上传文件时上传成功,几十上百时只有部分上传成功,其余失败,而且不报错。过程表现为:服务器接收到文件数据,在阿里百川文件管理页面可以看到上传文件的信息,但最终只剩下上传成功的文件的信息,而上传失败的文件信息则从原来显示的表格中消失。查看日志,没有出现异常信息。猜想是方法调用出现问题(瞎猜),于是改用消息队列,先将请求放入队列,再一个个取出来上传。

4.2、以上改善后上传成功几率更小,上传失败出现异常:File has been moved - cannot be read again.

 686f90d09b095e24e5adfaff33964a5f7af0eea7

网上查到类似错误情形:分析有两种种原因 ①在配置spring MultipartResolver时不仅要配置maxUploadSize,还需要配置maxInMemorySize。但原因都没说的很清楚。只是简单说maxInMemorySize的默认值为10240 bytes(10K),超出这个大小的文件上传spring会先将上传文件记录到临时文件中。临时文件会被删除。②多线程,每个文件上传都开一个线程。

很显然,我用的是一个线程,所以不可能是后中情况。

所以只能从第一种情况来考虑。初次将maxInMemorySize设为40k测试没有半点效果,我的测试客户端上传文件都是3.2M的。十个客户端就是32M,很显然设置maxInMemorySize值用处不大。而且报错就是文件被移除,文件为什么会被移除,据说是apache内部原理,看不到也不懂。想了半天,最终我自己先把文件存在本地作为临时文件,再一个一个上传到目的地。

5、主要代码:

public class UploadFileMessage{

private String dir;

private Long userID;

private String fileType;

private String tempFilename;

private String filename;

get/set 省略

}

 1a20326ca739f258d33809981f4bf3328072f8e8

5c15614d4f6506abac2d2da9f0888704a3c7775b

 

 

运用以上方法,大体解决了多客户端同时上传文件部分上传失败的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值