spring mvc文件上传和下载

首先要导入2个包(上传文件包和io的包)

aaarticlea/png;base64,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" alt="" />

配置文件spring-servlet.xml文件中

<!-- 配置文件上传MultipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5000000"></property>
</bean>

如果id="multipartResolver"没传,就会报以下的错(小心小心)

Request processing failed; nested exception is java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?

添加文件的显示页面add.sjp

a、enctype="multipart/form-data"这句就是告诉,要添加文件,很重要

b、 attach:<input type="file" name="attach"><br/>

    <form:form modelAttribute="user" method="post" enctype="multipart/form-data">
ID:<form:input path="id"/><br/>
userName:<form:input path="userName"/><form:errors path="userName"/><br/>
password:<form:input path="password"/><form:errors path="password"/><br/>
email:<form:input path="email"/><form:errors path="email"/><br/>
attach:<input type="file" name="attach"><br/>
<input type="submit" value="提交"/>
</form:form>

修改添加的方法

a、指定路径

b、上传文件,就要文件保存的目标位置

@RequestMapping(value="/add",method=RequestMethod.POST)
public String add(@Validated User user,BindingResult bindingResult,MultipartFile attach,HttpServletRequest request){
//上传文件就是要上传的路径所以就需要request对象
if(bindingResult.hasErrors()){
return "user/add";
}
//指定上传位置
String uploadFilePath = request.getSession().getServletContext().getRealPath("statics/upload");
System.out.println(uploadFilePath); System.out.println(attach.getOriginalFilename());//原始名
System.out.println(attach.getContentType());//类型
System.out.println(attach.getName());//页面表单控件name的值 if(!attach.isEmpty()){
try {
//"/" 更换成自动识别分隔符File.separator
File saveFile = new File(uploadFilePath+File.separator+attach.getOriginalFilename());
//第一个是拿到输入流,第二个参数是保存到哪里
FileUtils.copyInputStreamToFile(attach.getInputStream(), saveFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//把user对象放进去key(id)
userList.put(user.getId(), user); // return "user/userlist";//返回到逻辑视图名
//(添加后,不能把添加过的数据展示出来)服务器端行为
return "redirect:/user/list";//客户端重新发送请求(把添加进去的展示出来)
}

多文件的上传

因为是多文件所以一定要加@RequestParam不加的话报如下异常

//Could not instantiate bean class [[Lorg.springframework.web.multipart.MultipartFile;]: No default constructor found;nested exception is java.lang
//不能实例化bean类[[Lorg.springframework.web.multipart。MultipartFile;]:没有默认构造函数发现,嵌套异常. lang。
//页面500
//文件上传(多文件)
@RequestMapping(value="/add",method=RequestMethod.POST)
public String add(@Validated User user,BindingResult bindingResult,@RequestParam("attachs") MultipartFile[] attachs,HttpServletRequest request){
//上传文件就是要上传的路径所以就需要request对象
if(bindingResult.hasErrors()){
return "user/add";
}
//指定上传位置
String uploadFilePath = request.getSession().getServletContext().getRealPath("statics/upload");
try {
for(MultipartFile attach:attachs){ if(!attach.isEmpty()){ //"/" 更换成自动识别File.separator
File saveFile = new File(uploadFilePath+File.separator+attach.getOriginalFilename());
//第一个是拿到输入流,第二个参数是保存到哪里
FileUtils.copyInputStreamToFile(attach.getInputStream(), saveFile);
}
}
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//把user对象放进去key(id)
userList.put(user.getId(), user); // return "user/userlist";//返回到逻辑视图名
//(添加后,不能把添加过的数据展示出来)服务器端行为
return "redirect:/user/list";//客户端重新发送请求(把添加进去的展示出来)
}

因为多文件是一个数组,attach:<input type="file" name="attachs"><br/>

这边的name要是attachs,否则就找不到

<form:form modelAttribute="user" method="post" enctype="multipart/form-data">
ID:<form:input path="id"/><br/>
userName:<form:input path="userName"/><form:errors path="userName"/><br/>
password:<form:input path="password"/><form:errors path="password"/><br/>
email:<form:input path="email"/><form:errors path="email"/><br/>
attach:<input type="file" name="attachs"><br/>
attach1:<input type="file" name="attachs"><br/>
attach2:<input type="file" name="attachs"><br/>
<input type="submit" value="提交"/>
</form:form>
上一篇:[转] Unity Mathf 数学运算(C#)


下一篇:ios网络层优化深入浅出