SpringMVC-4.2 CommonsMultipartResolver 文件上传配置

2018年的第一个工作日就奠定了新的一年的功能状态:每天都会忙到脖子抽筋。

接下来简单描述一下我碰到的问题:生产服务器,操作系统为RedHat6.4;

产品中包括了不少导入功能,产品在生产服务器运行了有将近半年,半年内客户一直反应良好,没有出现什么重大的问题,但是在新年到来的第一个的工作日,客服反映了系统中所有导入功能均不能用,现象为界面提示:“导入失败”;

接到用户反馈我总结可能导致这个问题的一些原因:

1. 服务器磁盘空间不足;

2. 实实在在的系统bug;

现场就是上面的现象,最终,排查出的问题原因如下:

1. CommonsMultipartResolver的配置

SpringMVC利用CommonsMultipartResolver的配置方式为:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

CommonsMultipartResolver有一个参数是maxInMemorySize,表示上传的文件最大可以占用多少内存,默认配置为10240(10K)。如果上传的文件小于此配置,则不会讲内存中的文件写到硬盘,此时上传的文件的描述为In Memory;反之,上传文件处理器会将此文件从内存中写入硬盘,写入硬盘的路径为/tmp/xxxx.dir/xxxx.tmp;

于是,确认了客户现场导入的文件大小为将近60K,满足上述说明的将从内存把文件写入硬盘的临时文件中。

但是操作过程中却会报错:

org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed.C:\Users\Andy\AppData\Local\Temp\jetty-0.0.0.0-8080-statics-_-any-3400158997311945358.dir\upload_fb7df272_3aed_4e43_aee1_fd48d7761c29_00000004.tmp (系统找不到指定的路径。)

2. linux操作系统的自动清理/tmp机制

有了上述报错之后,自然要去排查/tmp路径下是否存在.dir文件夹,发现并不存在。

于是经过上网搜寻资料,让我认识了tmpwatch工具;

tmpwatch是linux操作系统下一个定时执行清理临时文件夹中文件的命令工具,默认配置在/etc/cron.daily/tmpwatch文件中,默认清除/tmp文件夹下30天内未被访问的文件或文件夹。

原因就是因为tmpwatch将/tmp下的临时文件删除了,所以导入功能找不到此文件夹,无法将内存中的文件内容写入临时文件,导致导入失败。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值