spring mvc 三种上传文件方法实例

spring reference中关于文件上传的方法不知三种,本文只举三个最常用方法的例子。

首先是html或者jsp文件:

<!DOCTYPE html>
<html>
<meta charset="utf-8">
</head>
<body>
	<h1>通过commons-fileupload上传文件</h1>
	<form action="<%=basePath%>file/upload1" method="post"
		enctype="multipart/form-data">
		<input type="file" name="file">
		<input type="submit" value="upload">
	</form>
	<h1>通过Servlet3上传文件</h1>
	<form action="<%=basePath%>file/upload2" method="post"
		enctype="multipart/form-data">
		<input type="file" name="file">
		<input type="submit" value="upload">
	</form>
	<h1>通过Servlet3中的javax.servlet.http.Part上传文件</h1>
	<form action="<%=basePath%>file/upload3" method="post"
		enctype="multipart/form-data">
		<input type="file" name="file">
		<input type="submit" value="upload">
	</form>
</body>
</html>

方法一:通过MultipartFile和commons-fileupload上传

先要在dispatcher-servlert中进行配置:

<bean id="multipartResolver"
	class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<property name="maxUploadSize" value="104857600" />
	<property name="maxInMemorySize" value="4096" />
	<property name="defaultEncoding" value="UTF-8" />
</bean>
需要引入commons-fileupload.jar,maven配置如下:

<dependency>
	<groupId>commons-fileupload</groupId>
	<artifactId>commons-fileupload</artifactId>
	<version>1.3.1</version>
</dependency>
然后是@Controller 中的方法

@RequestMapping("/upload1")
public String upload1(HttpServletRequest request)
		throws IllegalStateException, IOException {
	CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
			request.getSession().getServletContext());
	if (multipartResolver.isMultipart(request)) {
		MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
		Iterator<String> iterator = multipartHttpServletRequest
			.getFileNames();
		while (iterator.hasNext()) {
			MultipartFile file = multipartHttpServletRequest
				.getFile(iterator.next());
			if (file != null) {
				String fileName = "uploadFile" + file.getOriginalFilename();
				String path = "/Users/***/" + fileName;
				file.transferTo(new File(path));
			}
		}
	}
	return "success";
}

方法二:通过MultipartFileServlet3上传

首先,这种方式的配置只能是servlet级别的,或者配置在web.xml中,或者在编程式配置Servlet时配置javax.servlet.MultipartConfigElement ,或者在控制器中引入注解javax.servlet.annotation.MultipartConfig

下面以web.xml配置为例:

<servlet>
	<servlet-name>dispatcher</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<load-on-startup>1</load-on-startup>
	<!-- 为使用serlvet3进行文件上传而添加的设置 -->
	<multipart-config>
		<max-file-size>1073741824</max-file-size>
	</multipart-config>
</servlet>
<servlet-mapping>
	<servlet-name>dispatcher</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>
然后在dispatcher-servlert中进行配置:

<bean id="multipartResolver"
	class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
</bean>
最后是@Controller 中的方法:

@RequestMapping(value = "/upload2", method = RequestMethod.POST)
public String upload2(@RequestParam("file") MultipartFile file)
	<span style="white-space:pre">	</span>throws IOException {
	if (!file.isEmpty()) {
		String fileName = "uploadFile" + file.getOriginalFilename();
		String path = "/Users/***/" + fileName;
		file.transferTo(new File(path));
		return "success";
	}
	return "fail";
}

方法三:通过servlet3和javax.servlet.http.Part接口上传

配置同方法二

@Controller 中的方法为:

@RequestMapping(value = "upload3", method = RequestMethod.POST)
public String upload3(@RequestParam("file") Part file) throws IOException {
	if (file.getSize() != 0) {
		String fileName = this.getFileName(file);
		if (fileName != null) {
			String path = "/Users/***/" + fileName;
			file.write(path);
		}
	}
	return "success";
}
	
// 获取上传文件名,没有则返回null
private String getFileName(Part part){  
<span style="white-space:pre">	</span>//获取header信息中的content-disposition,如果为文件,则可以从其中提取出文件名  
        String cotentDesc = part.getHeader("content-disposition");  
        String fileName = null;  
        Pattern pattern = Pattern.compile("filename=\".+\"");  
        Matcher matcher = pattern.matcher(cotentDesc);  
        if(matcher.find()){  
            fileName = matcher.group();  
            fileName = fileName.substring(10, fileName.length()-1);  
        }  
        return fileName;  
}  






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值