Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的。Spring 用Jakarta Commons FileUpload 技术实现了一个MultipartResolver 实现类:CommonsMultipartResovler Spring MVC 上下文中默认没有装配 MultipartResovler,因此默认情况下不能处理文件的上传工作,如果想使用 Spring的文件上传功能,需现在上下文中配置 MultipartResolver.
• defaultEncoding: 必须和用户 JSP 的 pageEncoding 属性一致,以便正确解析表单的内容。
• 为了让 CommonsMultipartResovler 正确工作,必须先将 Jakarta Commons FileUpload 及 Jakarta Commons io的类包添加到类路径下。
1.首先在maven中导入如下的依赖:
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.0.1</version>
</dependency>
2.配置MultipartResolver
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<property name="maxUploadSize" value="1024000"></property>
</bean>
3.
<form action="testFileUpload" method="post" enctype="multipart/form-data">
File:<input type="file" name="file">
Desc:<input type="text" name="desc">
<input type="submit" value="Submit">
</form>
4.
@RequestMapping("/testFileUpload")
public String testFileUpload(@RequestParam("desc") String desc,
@RequestParam("file") MultipartFile file) throws IOException{
System.out.println("desc: " + desc);
System.out.println("OriginalFilename: " + file.getOriginalFilename());
System.out.println("InputStream: " + file.getInputStream());
return "success";
}
目前controller里只是实现了一些打印的功能,如果需要,可以将接收到的文件存到服务器的硬盘上,这样就真正完成了一个文件保存的操作。
________________________________下面就是操作保存的代码与配置————————————
form表单
<form id="formfile" action="slideshowin" method="post" enctype="multipart/form-data">
<input type="button" id="buttonf" οnclick="buttonfunction()" value="增加图片" />
<input type="file" name="file" οnchange="fileupload()" id="files" />
</form>
ajxa提交表单
function fileupload() {
获取表单,必须加[0]才能取到数据
var formData =new FormData($("#formfile")[0]);
$.ajax({
url: url,
type: "POST",
data: formData,
cache:false,
contentType: false,
processData: false,
success: function (dat) {
},
error: function (dat) {
}
});
}
后台代码 spring的
MultipartFile类,必须在xml配置
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="209715200"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="resolveLazily" value="true"/>
</bean>
public String insert(@RequestParam("file")MultipartFile file,HttpServletRequest request)throws IOException {
if(!file.isEmpty()){
获取后缀名
String suffix =file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
//设置允许上传文件类型
String suffixList = "jpg,png,ico,bmp,jpeg";
判断是否包含
if(suffixList.contains(suffix.trim().toLowerCase()))""){
保存文件的路径
String path = request.getSession().getServletContext().getRealPath("")+"slideImg/"+file.getOriginalFilename();
查看路径是否存在,不存在就创建
//image/jpeg
if(!new File(path).exists()){
new File(path).mkdirs();
}
spring的transferTo保存文件方法
file.transferTo(new File(path));
Slideshow slideshow=new Slideshow();
slideshow.setSlideshowImg(file.getOriginalFilename());
slideshow.setSlideshowState(0);
slideshow.setSlideshowTime(new DataTime().getDatatime());
slideshowService.insert(slideshow);
return "成功!";
}
return "图片格式不正确!";
}
return "未选择图片!";
}