springMVC上传文件到服务器,数据库中存储文件路径
1.封装了文件上传执行过程,其中参数验证、异常处理等需要自己处理。
/**
* springMVC 处理文件上传
* @param partFile 上传的文件
* @param rootPath 文件存放的目录 例如:/mnt/file/
* @return 传入的文件参数若为空,或者传入的文件名称为空时返回值为null,否则返回文件在数据库中存储的相对路径+文件名称
* 返回值(存储的相对路径+文件名称)=当前年月+随机数
* 文件存放的绝对路径+文件名称=rootPath+当前年月+随机数
* 例如:上传的文件类型为jpg rootPath:/mnt/file/ 当前年月为 :201611 生成随机数为:7a932fe2-61a1-4fd8-ad56-385b289c9cd3
* 返回值(存储的相对路径+文件名称)=201611/7a932fe2-61a1-4fd8-ad56-385b289c9cd3.jpg
* 文件存放的绝对路径+文件名称=/mnt/file/201611/7a932fe2-61a1-4fd8-ad56-385b289c9cd3.jpg
* @throws IOException
* @throws IllegalStateException
*/
public String uploadFile(MultipartFile partFile,String rootPath) throws IllegalStateException, IOException {
if(partFile!=null&&partFile.getOriginalFilename()!=null&&partFile.getOriginalFilename().length()>0){
Calendar cal = Calendar.getInstance();
int month = cal.get(Calendar.MONTH) + 1;
int year = cal.get(Calendar.YEAR);
String filePath=rootPath+year+month+"/";
File dir=new File(filePath);
if(!dir.isDirectory())
dir.mkdir();
String fileOriginalName=partFile.getOriginalFilename();
String newFileName=UUID.randomUUID()+fileOriginalName.substring(fileOriginalName.lastIndexOf("."));
File file=new File(filePath+newFileName);
//文件写入磁盘
partFile.transferTo(file);
//返回存储的相对路径+文件名称
return ""+year+month+"/"+newFileName;
}
else
return null;
}
2.springMVC.xml中的配置
<!-- 文件上传 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为5MB -->
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean>
<!-- 配置静态资源 -->
<mvc:resources location="file:/mnt/file/" mapping="/file/**"/>
如果出现错误,可能是没有配置 <mvc:annotation-driven /> 的原因。3.界面实例
<tr>
<td>文件</td>
<td><c:if test="${file !=null}">
<img src="${pageContext.request.contextPath }/file/${file}"
width=100 height=100 />
<br />
</c:if> <inputtype ="file" name="partFile" /></td>
</tr>