SpringMVC实现文件的上传与下载

所需要的jar包

一、文件上传 

springmvc.xml

<!-- 配置 MultipartResolver -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="UTF-8"></property>
		<!-- 指定所上传文件的总大小不能超过1024000KB。
		注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
		<property name="maxUploadSize" value="1024000"></property>	
	</bean>	
	
	<!-- 配置使用 SimpleMappingExceptionResolver 来映射异常 -->
	<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<property name="exceptionAttribute" value="ex"></property>
		<property name="exceptionMappings">
			<props>
				<prop key="java.lang.ArrayIndexOutOfBoundsException">error</prop>
			</props>
		</property>
	</bean>

1、实现上传文件的内容的读取

jsp代码

<form action="testHttpMessageConverter" method="post" enctype="multipart/form-data">
		File: <input type="file" name="file"/>
		Desc: <input type="text" name="desc"/>
		<input type="submit" valuue="Submit"/>
	</form>

java代码 

@ResponseBody
	@RequestMapping("/testHttpMessageConverter")
	public String testHttpMessageConverter(@RequestBody String body) {
		System.out.println(body);
		return "helloword! " + new Date();
	}

运行结果

将文件里的内容打印出来

2、单文件上传

jsp代码

<form action="FileUpload.do" method="POST" enctype="multipart/form-data">
		<input type="hidden" name="tuzi" value="tuzi">
		上传文件:<input type="file" name="uploadfile">
		<input type="submit" value="文件上传"/>
	</form>

Java代码

@RequestMapping("/FileUpload")
	public String queryFileData(@RequestParam("uploadfile") 
		CommonsMultipartFile file, HttpServletRequest request) {
		// MultipartFile是对当前上传的文件的封装,当要同时上传多个文件时,可以给定多个MultipartFile参数(数组)
		if(!file.isEmpty()) {
			//取文件格式后缀名
//			String type = file.getOriginalFilename().substring(
//					file.getOriginalFilename().indexOf("."));
			//取文件名作为保存到服务器的文件名称
			String filename = file.getOriginalFilename();
			//存放的路径
			String path = "D:\\upload\\" + filename;
			//进行路径拼接=前半部分路径+文件名称
			File destFile = new File(path);
			try {
				// FileUtils.copyInputStreamToFile()这个方法里对IO进行了自动操作,不需要额外的再去关闭IO流
				FileUtils
				.copyInputStreamToFile(file.getInputStream(), destFile);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println(path);
			System.out.println(destFile);
			return "success";
		}
		return "error";
	}

 运行结果

3、多文件上传

jsp代码

<form action="FileUploads.do" method="POST" enctype="multipart/form-data">
		<input type="hidden" name="tuzi" value="tuzi">
		上传文件:<input type="file" name="uploadfile">
		上传文件:<input type="file" name="uploadfile">
		上传文件:<input type="file" name="uploadfile">
		<input type="submit" value="文件上传"/>
	</form>

java代码

原理就是将 CommonsMultipartFile变成一个数组

@RequestMapping("/FileUploads")
	public String queryFileDatas(@RequestParam("uploadfile") CommonsMultipartFile[] files, HttpServletRequest request) {
		// MultipartFile是对当前上传的文件的封装,当要同时上传多个文件时,可以给定多个MultipartFile参数(数组)
		if (files != null) {
			for(int i = 0; i < files.length; i++) {
				// 取文件名作为保存到服务器的文件名称
				String filename = files[i].getOriginalFilename();
				// 存放的路径
				String path = "D:\\upload\\" + filename;
				// 进行路径拼接=前半部分路径+文件名称
				File destFile = new File(path);
				try {
					// FileUtils.copyInputStreamToFile()这个方法里对IO进行了自动操作,不需要额外的再去关闭IO流
					FileUtils.copyInputStreamToFile(files[i].getInputStream(), destFile);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			return "success";
		}
		return "error";
	}

 

二、实现文件下载

这里我们先在项目里放一个文件

<a href="testResponseEntity">Test ResponseEntity</a>
@RequestMapping("/testResponseEntity")
	public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException{
		byte [] body = null;
		ServletContext servletContext = session.getServletContext();
		InputStream in = servletContext.getResourceAsStream("/files/abc.txt");
		body = new byte[in.available()];
		in.read(body);
		
		HttpHeaders headers = new HttpHeaders();
		headers.add("Content-Disposition", "attachment;filename=abc.txt");
		
		HttpStatus statusCode = HttpStatus.OK;
		
		ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(body, headers, statusCode);
		return response;
	}

运行结果 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值