文件上传是项目开发中最常用的功能。
为了能上传文件,必须将表单的method设置为POST,并且将enctype设置为multipart/form-data。
只有在这种情况下,浏览器才会把用户选择的文件二进制数据发送给服务器(二进制流的方式)。
Spring MVC为文件上传提供了直接的支持,这种支持是用即插即用的MultipartResolver实现的。
Spring MVC使用Apache Commons FileUpload技术实现了一个MultipartResolver实现类:CommonsMultipartResolver。因此SpringMVC的文件上传还需要依赖Apache Commons FileUpload的组件
导包:
com.springsource.org.apache.commons.fileupload-1.2.0.jar
com.springsource.org.apache.commons.io-1.4.0.jar在applicationContext中配置解析器
<bean id="commonsmultipartresolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>
- 后台接收文件(没有接收成功,原因未知)
package com.bamzhy.Controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
@Controller
public class CoreController {
@RequestMapping("/fileupload")
public String test(HttpServletRequest request, MultipartFile pic) throws SQLException {
//输入项的名字(jsp传过来的名字)
String name = pic.getName();
System.out.println("name= "+name);
//文件名(真实文件名)
String originalFilename = pic.getOriginalFilename();
System.out.println("originalFilename= "+originalFilename);
//保存的目标路径
String realPath = request.getServletContext().getRealPath("/WEB-INF/pic/");
System.out.println("realPath"+realPath);
File file= new File(realPath+originalFilename);
//保存的目标文件
System.out.println("file"+file.getAbsolutePath());
try {
//正式开始传输
pic.transferTo(file);
request.setAttribute("result","success");
} catch (IOException e) {
e.printStackTrace();
request.setAttribute("result","fail");
}
return "/WEB-INF/result.jsp";
}
}
- 限制上传文件的大小(非做不可否则会报错)
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="1024000" >
</property>
</bean>