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

简介: 项目运行在远程虚拟机ubuntu上,文件上传到阿里百川多媒体下。单个或几个客户同时上传文件时上传成功,几十上百时只有部分上传成功,其余失败,而且不报错。上传失败出现异常:File has been moved - cannot be read again.

1、环境 myeclipse2014 tomcat7ubuntu

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 bytes10K),超出这个大小的文件上传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

 

 

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

目录
相关文章
|
6月前
|
PHP Android开发
android通过http上传文件,服务器端用php写(原创)
android通过http上传文件,服务器端用php写(原创)
65 4
|
6月前
|
缓存 网络协议 数据可视化
WinSCP下载安装并实现远程SSH本地服务器上传文件
WinSCP下载安装并实现远程SSH本地服务器上传文件
179 1
|
6月前
Socket网络编程练习题三:客户端上传文件到服务器
Socket网络编程练习题三:客户端上传文件到服务器
|
1月前
SecureCRT 通过xftp命令行上传文件到服务器上
SecureCRT 通过xftp命令行上传文件到服务器上
128 1
|
1月前
|
前端开发 Java
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
文章介绍了如何使用SpringBoot创建简单的后端服务器来处理HTTP请求,包括建立连接、编写Controller处理请求,并返回响应给前端或网址。
56 0
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
|
3月前
|
Java
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
84 1
|
5月前
|
存储 数据库连接 数据库
如何使用Python上传文件到FTP服务器
如何使用Python上传文件到FTP服务器
84 1
|
5月前
|
前端开发 Java API
Android端通过HttpURLConnection上传文件到服务器
Android端通过HttpURLConnection上传文件到服务器
85 0
|
存储 网络安全 数据安全/隐私保护
scp上传文件到远程服务器,如何避免每次都要输入远程服务器的密码
scp上传文件到远程服务器,如何避免每次都要输入远程服务器的密码
404 0
|
11月前
|
应用服务中间件 开发工具 Android开发
Tomcat配置虚拟路径,使上传文件与服务器分离
Tomcat配置虚拟路径,使上传文件与服务器分离
104 0