SpringMVC学习笔记四之文件上传

以下是SpringMVC提供自带的文件上传的bean. (在做上传是,最好是使用页面控件对文件类型大小等进行过滤。)

	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="utf-8">		<!-- 上传文件编码格式 -->
		<property name="maxUploadSize" value="10485760000">	<!-- 上传文件最大文件字节 -->
		<property name="maxInMemorySize" value="40960">		<!-- 上传文件最大缓存字节 -->
	</bean>
Spring通过对Servlet API的HttpServletRequest接口接口进行扩展, 使其能够很好
地处理文件上传。扩展后的接口名为org.springframework.web.multipart.MultipartHttpServletRequest
interface MultipartHttpServletRequest extends HttpServletRequest{
public MultipartFile getFile(String name);
public Map getFileMap();
public Iterator getFileNames();
}
页面中上传代码如下:

<form action="data/upload" method="post" enctype="multipart/form-data">	<!-- 这里method 必需为post 上传文件必须加enctype="multipart/form-data"-->
   	选择文件:<input type="file" name="file"/><br/>
   	<input type="submit" value="上传">
</form>
后台代码为:

@RequestMapping("/upload")
public ModelAndView upload(@RequestParam("file")CommonsMultipartFile file,HttpServletRequest req) throws UnsupportedEncodingException{
	if(!file.isEmpty()){	//这里我上传的文件为2.txt
		System.out.println("ContentType---->" + file.getContentType());		//text/plain	文件的ContentType
		System.out.println("Name---->" + file.getName());			//file		对应页面上表单的name
		System.out.println("OriginalFilename---->" + file.getOriginalFilename());//2.txt	文件名
		System.out.println("Size---->" + file.getSize());			//23201		文件大小
		System.out.println("StorageDescription---->" + file.getStorageDescription());//in memory	
		System.out.println("Bytes()---->" + file.getBytes());	//文件内容对应的字节码
			
		try {
			FileOutputStream os = new FileOutputStream("D:/update1/"+ new Date().getTime() +file.getOriginalFilename());//创建一个输出流
			InputStream in = file.getInputStream();		//获取SpringMVC封装好的一个输入流
			int b = 0;					//以下就是读写文件了
			while((b=in.read()) != -1){
				os.write(b);
			}
			os.flush();
			os.close();
			in.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	req.setAttribute("fileName", file.getOriginalFilename());
	return new ModelAndView("/success");
}
以下是SpringMVC提供的另一种文件上传后台代码:

@RequestMapping("/upload2")
public ModelAndView upload2(HttpServletRequest request) throws UnsupportedEncodingException{
	//获得上下文中CommonsMultipartResolver
	CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
	//因为request里面可以存很多类型的内容这里要放到request中保存的是否为Multipart类型
	if(multipartResolver.isMultipart(request)){
		//将HttpServletRequest强转为SpringMVC提供的MultipartHttpServletRequest类型
		MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
		Iterator<String> it = multiRequest.getFileNames();			//获取所有上传文件的名字
		while(it.hasNext()){
			MultipartFile file = multiRequest.getFile(it.next());		//根据名字找到对应的文件,这里文件名和文件成键值对关系
			if(!file.isEmpty()){					
				String fileName = file.getOriginalFilename();		//文件名
				String path = "D:/update2/";				//需要上传的目录
				File localFile = new File(path+fileName);		//要将文件写至这个路径下的文件
				try {
					file.transferTo(localFile);			//利用SpringMVC自带的读写文件方法,效率比上一个方法快
				} catch (IllegalStateException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}	
		}
	}
	return new ModelAndView("/success");
}
request.getSession().getServletContext().getContextPath()地址为: /SpringMVC7 //相对路径
request.getSession().getServletContext().getRealPath("/")地址为: D:\Tomcat\Tomcat6.0\webapps\SpringMVC7\ //绝对路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值