SpringMVC为文件上传提供了直接的支持,这种支持是通过即插即用的MultipartResolver接口实现的。Spring用它的实现类CommonsMultipartResolver来实现。
SpringMVC上下文中没有装配任何的MultipartResolver, 因此默认情况下SpringMVC不能处理文件的上传的操作,如果需要使用上传功能,需要手动配置MultipartResolver。
准备jar包
配置xml
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 指定默认的编码格式 -->
<property name="defaultEncoding" value="UTF-8" />
<!-- 指定允许上传的文件大小,单位Byte-->
<property name="maxUploadSize" value="512000" />
</bean>
增加上传文件的jsp
<form action="fileuploadpost" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="上传"/>
</form>
<img alt="出错了" src="${imgurl}"/> 上传成功跳转回来显示
编写接收方法
@RequestMapping(value ="/fileuploadpost" ,method = RequestMethod.POST)
public String fileuploadpost(HttpServletRequest request,@RequestParam("file")MultipartFile file,Map<String,Object> map) {
try {
String fileName = getFileName(request,file);
System.out.println(fileName);
map.put("imgurl", fileName);
} catch (Exception e) {
e.printStackTrace();
}
return "fileupload";
}
public String getFileName(HttpServletRequest request,MultipartFile file) throws Exception, IOException {
//获取上传路径
String path = request.getServletContext().getRealPath("uploads");
System.out.println(path);
//获取文件路径
String filename = file.getOriginalFilename();
String filsuffix= filename.substring(filename.lastIndexOf("."));
System.out.println(filename);
String newName = UUID.randomUUID()+filsuffix;
File f = new File(path+"/"+newName);
file.transferTo(f);
return "uploads/"+newName;//将图片路径发送回去
}
多文件上传只需将接收方法的MultipartFile 该为MultipartFile[] 数组即可
如:
@RequestMapping(value ="/fileuploadpost" ,method = RequestMethod.POST)
public String fileuploadpost(HttpServletRequest request,@RequestParam("file")MultipartFile[] file,Map<String,Object> map) {
List<String> li = new ArrayList<>();
try {
for(MultipartFile f : file){
String fileName = getFileName(request,f);
li.add(fileName);
}
map.put("imgurl", li);//将图片路径传回页面
} catch (Exception e) {
e.printStackTrace();
}
return "fileupload";
}
若在方法参数前没有加上@RequestParam(“file”) 注解 可能会出现nosuchmethodexception异常
MultipartFile可以获取表单提交过来的文件域
常用方法
isEmpty():判断是否提交文件
getContentType():获取文件类型
getName():获取表单元素名称
getOriginalFilename():获取提交的文件名称
getInputStream():获取文件流
getSize():获取文件大小
getBytes():获取字节数组