网页中上传文件

基于SpringMVC的文件上传(Upload:上载)

目标

在页面中点击浏览按钮,可以将指定的文件上传到服务器。

创建项目

创建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属性值必须是postenctype属性值必须是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";
	}

你可能感兴趣的:(学习日志)