改造原有系统,使用springMVC框架,实现文件上传。
一、前端页面使用html而不是jsp,如果使用form提交没有问题,但是现在要使用ajax上传,检索百度,发现使用FormData解决问题,具体如下:
1、Html页面中也要加入form标签,且 method='post',enctype="multipart/form-data"
<form method="post" enctype="multipart/form-data" id="uploadForm">
............
............
............
</form>
2、创建FormData对象
var formData = new FormData(document.getElementById('uploadForm'));
如果想要再增加一些参数可以使用append方法进行添加
formData.append("userName",userName);
3、将创建的formData对象当成ajax参数进行传递即可。
二、能够上传文件了,但是传递的文件类型是MultipartFile对象,想要转换成File对象,操作如下:
CommonsMultipartFile cf= (CommonsMultipartFile)request.getParameters("file");
DiskFileItem dfi = (DiskFileItem) cf.getFileItem();
File file = dfi.getStoreLocation();
三、坑来了,由于原来的程序在解析XML文件的时候要求有临时文件,开始测试上传时,7条数据没有问题,后台改成1条数据了就怎么也不能传递了,后台异常 FileNotFound,这有点奇怪,这文件用原来的系统(1条数据)能加载啊,怎么这个就不行,怀疑是SpringMVC上传的问题,参数?使用springMVC上传文件需要配置 multipartResolver,如下:
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 上传文件大小上限,单位为字节(10MB) -->
<property name="maxUploadSize">
<value>10485760</value>
</property>
<property name="maxInMemorySize"><!--上传文件的大小超过时 放在temp临时文件中-->
<value>4096</value>
</property>
<!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-
8859-1 -->
<property name="defaultEncoding">
<value>UTF-8</value>
</property>
</bean>
注意:bean 的 id 一定是 multipartResolver
就是这个
<property name="maxInMemorySize">
<value>4096</value>
</property>
造成了没有生成临时文件,检查了一条数据的文件大小刚好是3.8k,不生成临时文件,后面在解析文件是报错,改小就能解决了