Spring MVC 实现文件上传与下载,并配置异常页面

目录


上传文件的表单要求

Spring MVC实现上传文件

需要导入的jar包

配置MultipartResolver解析器

编写接收上传文件的控制器

 


上传文件的表单要求

  对于普通表单来说,有几个注意点:

  1、action:表示要提交到哪里;

  2、method:表单提交的方式,常用的有post和get两种,不写的话,默认是get;提交文件是只能使用post方式。

  3、enctype:编码类型,表示提交的数据是什么格式。有三个值,

    1)不显式设置enctype时,默认是application/x-www-form-urlencoded,表示提交的是普通的数据;

    2)text/plain,表示提交的是文本数据,数据量稍大一点。

    3)multipart/form-data,这种方式可以提交二进制数据(音频、图像等文件)

  综上,如果要上传文件,必须要将method设置为post,然后将enctype设置multipart/form-data。另外,上传文件的input标签的type属性设置为file。

<form action="upload" method="post" enctype="multipart/form-data">
	<input type="file" name="myfile" />
	<input type="submit" name="submit" value="upload" />
</form>

  

Spring MVC实现上传文件

  在看Spring MVC是怎么实现文件上传之前,可以先看一下不是框架,使用原生的servlet开发是怎么实现文件上传的:Servlet 实现文件上传与下载

  在Servlet 3.0之后,Spring MVC实现文件上传主要是使用一个叫MultipartResolver的解析器,该解析器依赖于apache的commons-io和commons-fileupload。MultipartResolver会自动解析文件,之后我们在handlerMethod中,可以很方便的操作上传的文件。

  需要导入的jar包

  必不可少的commons-io.jar和commons-fileupload.jar这两个包,缺一不可。

配置MultipartResolver解析器

  MultipartResolver是一个interface,我们只需要配置他的一个实现类,比如CommonsMultipartResolver这个实现类,配置的方法也很简单,只需要配置一个id为multipartResolver的<bean>即可。

  在Spring MVC的配置文件中增加下面配置:

<!-- 创建MultipartResolver解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<!-- 配置属性,可以省略不配置,设置上传的文件maxSize,单位为B(字节) -->
	<property name="maxUploadSize" value="1000000"></property>
</bean>

  

  编写接收上传文件的控制器

package cn.ganlixin.controller;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class UploadController {

	@RequestMapping("upload")
	// 注意表单中文件input的name要和这里的参数名相同。 
	public String upload(MultipartFile myfile) throws IOException {
		
		// 上传一张图片 C:\Users\Administrator\Desktop\code.png
		
		// 获取文件的原始名称
		String originalFileName = myfile.getOriginalFilename();  // code.png
		
		// 获取上传文件的表单中,input的name值,其实就是myfile(就是接收时的名称)
		String fileName = myfile.getName();		// myfile
		
		// 获取上传的文件大小,单位为字节
		long fileSize = myfile.getSize();		// 5823(字节)
		
		String extensionName = originalFileName.substring(originalFileName.lastIndexOf("."));
		
		/*
		进行一些过滤判断操作
		 */
		
		// 将文件保存到硬盘中,文件名可以根据自己的规则来定,这里使用UUID
		String newFileName = UUID.randomUUID().toString();
		FileUtils.copyInputStreamToFile(
				myfile.getInputStream(), 
				new File("E:/uploads/" + newFileName + extensionName)
		);
		
		return "/success.jsp";
	}
}

  

猜你喜欢

转载自www.cnblogs.com/-beyond/p/10539656.html
今日推荐