在页面中点击浏览按钮,可以将指定的文件上传到服务器。
创建Maven Project,Group Id为cn.tedu.spring
,Artifact Id为SPRINGMVC-UPLOAD
,Packaging为war
,创建好项目后,生成web.xml文件,添加spring-webmvc
依赖,添加Tomcat运行环境(必须保证Eclipse中的Servers项目是打开的),复制spring的配置文件,删除所有已经存在的配置,复制前序项目中web.xml中的配置。
另外,为了实现文件上传,还需要添加依赖:
commons-fileupload
commons-fileupload
1.4
在webapp下创建index.html
页面,并在页面中设计:
以上代码中,的
method
属性值必须是post
,enctype
属性值必须是multipart/form-data
,且上传控件的type
属性值必须是file
。
确定页面中表单的action
属性的值为upload.do
。
检查spring.xml
中配置的组件扫描为cn.tedu.spring
。
创建cn.tedu.spring.UploadController
控制器类,并在类之前添加@Controller
注解,然后,添加处理请求的方法:
@Controller
public class UploadController {
@RequestMapping("upload.do")
@ResponseBody
public String upload() {
System.out.println("UploadController.upload()");
return "OK";
}
}
在SpringMVC框架中,使用了CommonsMultipartResolver
对上传的数据进行处理,需要在spring.xml中配置该类:
在配置时,必须指定id
,且值必须是multipartResolver
。
关于以上节点,可以暂不配置详细信息。
然后,在处理请求的方法中,添加MultipartFile file
参数,该参数就是用户上传的文件的数据,并在参数之前添加@RequestParam
注解。
最后,调用参数对象的void transferTo(File dest)
方法即可将用户上传的文件保存到服务器的硬盘中!
@RequestMapping("upload.do")
@ResponseBody
public String upload(
@RequestParam("file") MultipartFile file)
throws IllegalStateException, IOException {
System.out.println("UploadController.upload()");
// 执行保存文件
File dest = new File("F:/1/a.jpg");
file.transferTo(dest);
return "OK";
}
........
@RequestMapping("upload.do")
@ResponseBody
public String upload(@RequestParam("file") MultipartFile file,
HttpServletRequest request)
throws IllegalStateException, IOException {
System.out.println("UploadController.upload()");
// 判断上传的文件是否为空
boolean isEmpty = file.isEmpty();
System.out.println("\tisEmpty=" + isEmpty);
if (isEmpty) {
throw new RuntimeException("上传失败!上传的文件为空!");
}
// 检查文件大小
long fileSize = file.getSize();
System.out.println("\tsize=" + fileSize);
if (fileSize > 1 * 1024 * 1024) {
throw new RuntimeException("上传失败!上传的文件大小超出了限制!");
}
// 检查文件MIME类型
String contentType = file.getContentType();
System.out.println("\tcontentType=" + contentType);
List<String> types = new ArrayList<String>();
types.add("image/jpeg");
types.add("image/png");
types.add("image/gif");
if (!types.contains(contentType)) {
throw new RuntimeException("上传失败!不允许上传此类型的文件!");
}
// 准备文件夹
String parentDir = request.getServletContext().getRealPath("upload");
// request.getSession().getServletContext().getRealPath("");
// request.getRealPath("");
System.out.println("\tpath=" + parentDir);
File parent = new File(parentDir);
if (!parent.exists()) {
parent.mkdirs();
}
// 获取原始文件名
String originalFilename = file.getOriginalFilename();
System.out.println("\toriginalFilename=" + originalFilename);
// 确定最终保存时使用的文件
String filename = UUID.randomUUID().toString();
String suffix = "";
int beginIndex = originalFilename.lastIndexOf(".");
if (beginIndex != -1) {
suffix = originalFilename.substring(beginIndex);
}
// 执行保存文件
File dest = new File(parent, filename + suffix);
file.transferTo(dest);
return "OK";
}