首先需要在springmvc中配置如下:
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="uploadTempDir" value="/uploadTemp" /> <!-- 临时目录 -->
<property name="maxUploadSize" value="-1"/><!-- -1为不限制文件大小 -->
<property name="defaultEncoding" value="UTF-8"/>
<property name="resolveLazily" value="false"/>
</bean>
jsp页面中需要通过form表单实现文件上传,form表单如下:
<form id="uploadForm" action="<%=path%>/document/uploadFile.do" enctype="multipart/form-data" method="post">
<table>
<tr>
<td>选择附件:</td>
<td colspan="3">
<!--去掉input中的multiple属性即为单文件上传-->
<input type="file" name="fileIds" multiple onchange="doUpload()"/>
</td>
</tr>
</table>
</form>
表单中监听选中文件后的onChange事件的方法如下:
function doUpload() {
// 提交表单前可以做一些其他操作
$("#uploadForm").submit();
}
服务端Controller的写法如下:
// 上传附件
@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
public ModelAndView uploadFile(@RequestParam("fileIds") MultipartFile[] tmpFiles,
HttpServletRequest request, HttpSession session) {
// 此处写上传完成后转向的页面地址
ModelAndView modelAndView = new ModelAndView("document/fileIframe");
// 文件物理存储路径目录 D:/tomcat/webapp/cms/uploads/201705
String savePath = session.getServletContext().getRealPath("/uploads/" + dateToStr(new Date(), "yyyyMM"));
// 文件下载路径目录(相对路径) /cms/uploads/201705
String downloadPath = request.getContextPath().concat("/uploads/" + dateToStr(new Date(), "yyyyMM") + "/");
// 上传附件数据存在
if (tmpFiles != null && tmpFiles.length > 0) {
// 循环临时文件,对单文件上传同样效果
for (MultipartFile tmpFile : tmpFiles) {
// 获取原始文件名
String fileName = tmpFile.getOriginalFilename();
// 文件名加日期和随机数防止重名
String formatDate = new SimpleDateFormat("yyMMddHHmmss").format(new Date());
int random = new Random().nextInt(10000);
String extension = fileName.substring(fileName.lastIndexOf(".") + 1);
fileName = fileName.substring(0, fileName.lastIndexOf(".")) +
formatDate + random + "." + extension;
try {
// 将临时文件转存为正式文件(物理存储目录+带有随机数的文件名)
tmpFile.transferTo(new File(savePath + "/" + fileName));
} catch (IOException e) {
e.printStackTrace();
return modelAndView;
}
}
// 此处可以将上面的文件加入,返回页面展示或其他操作
// modelAndView.addObject("files", "");
return modelAndView;
}
return modelAndView;
}