spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方
1.form的enctype=”multipart/form-data” 这个是上传文件必须的
2.applicationContext.xml中 <bean id=”multipartResolver” class=”org.springframework.web.multipart.commons.CommonsMultipartResolver”/> 关于文件上传的配置不能少
注意导包: commons-fileupload-1.2.2.jar commons-io-2.2.jar
注意:配置multipartResolver时可以添加限制,例如
<!-- 设置上传文件最大值 10M=1*1024*1024(B)*10=1048576 bytes -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760" />
</bean>
一、普通表单上传代码:
上传界面代码:
<body>
<center>
<form action="user/addUser.do" method="post" enctype="multipart/form-data">
姓名: <input type="text" name="uname"><br>
密码: <input type="password" name="upass"><br>
照片:<input type="file" name="upload" value="选择图片">
<input type="submit" value="添加">
<input type="reset" value="清空">
</form>
</center>
</body>
控制器代码:
//转发地址不会变,重定向地址会变,经常使用转发,不使用重定向
@RequestMapping("addUser")
public ModelAndView addUser(ModelAndView mav,TblUser user,@RequestParam("upload")MultipartFile upload,HttpServletRequest request){
//获取文件上传路径
String path=request.getSession().getServletContext().getRealPath("upload");
//获取文件名称
String name=upload.getOriginalFilename();
System.out.println(path);
//创建一个目标文件夹下的目标文件
File targetfile=new File(path, name);
try {
//文件转移到目标文件夹中
upload.transferTo(targetfile);
user.setPhoto("upload/"+name);
System.out.println("上传成功");
} catch (IllegalStateException e) {
System.out.println("上传失败");
e.printStackTrace();
} catch (IOException e) {
System.out.println("上传失败");
e.printStackTrace();
}
userDao.addUser(user);
//name的值使用转发能取到,使用重定向就取不到
mav.addObject("name", "mengfancheng");
mav.setViewName("forward:userList.do");
return mav;
}
applicationContext.xml添加配置文件:
<!-- 支持上传 commons复合解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
二、SpringMVC+Ajax实现异步上传
页面代码这里可以忽略使用bootstrap的css样式:
<form class="form-horizontal" role="form" enctype="multipart/form-data" id="fileForm">
<div class="form-group">
<label for="firstname" class="col-sm-2 control-label">收件人邮箱</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="recipientEmail" name="recipientEmail" placeholder="请用英文半角 ; 分隔开多个收件人">
</div>
</div>
<div class="form-group">
<label for="lastname" class="col-sm-2 control-label">主题</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="subject" name="subject" placeholder="邮件主题">
</div>
</div>
<div class="form-group">
<label for="lastname" class="col-sm-2 control-label">邮件内容</label>
<div class="col-sm-10">
<textarea class="form-control" rows="3" name="text"></textarea>
</div>
</div>
<div class="form-group">
<label for="lastname" class="col-sm-2 control-label">附件一</label>
<div class="col-sm-10">
<input type="file" id="inputfile" name="attachment">
</div>
</div>
<div class="form-group">
<label for="lastname" class="col-sm-2 control-label">附件二</label>
<div class="col-sm-10">
<input type="file" id="inputfile" name="attachment">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default" onclick="morePicUpload();">发送指定内容</button>
</div>
</div>
</form>
Ajax上传的js代码:
function morePicUpload(){
var formData = new FormData(document.getElementById("fileForm"));
$.ajax({
url : "../testEmailSendCtrl/morePicUpload.do",
type : "post",
data :formData,
async : false,
cache : false,
dataType : "json",
contentType : false,
processData : false,
success : function(data){
alert("发送成功!");
window.location.reload();
}
});
}
Controller处理代码:
@RequestMapping("morePicUpload")
@ResponseBody
public Map<String, Object> morePicUpload(HttpServletRequest request) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("flag", "false");
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
String recipientEmails = multipartRequest.getParameter("recipientEmail");
String subject = multipartRequest.getParameter("subject");
String text = multipartRequest.getParameter("text");
System.out.println(recipientEmails);
System.out.println(subject);
System.out.println(text);
List<MultipartFile> filelist = multipartRequest.getFiles("attachment");
//获取文件上传路径
String path=request.getSession().getServletContext().getRealPath("upload");
for(MultipartFile file:filelist){
if(!file.isEmpty()){
//获取文件名称
String name=file.getOriginalFilename();
//创建一个目标文件夹下的目标文件
File targetfile=new File(path, name);
try {
//文件转移到目标文件夹中
file.transferTo(targetfile);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return map;
}