文件上传与下载——SpringMVC框架系列教程(11)

IT 文章5年前 (2021)发布 小编
0 0 0

一、文件上传

1.使用SpringMVC上传文件,需要实现MultipartResolver接口,而该接口的实现类SpringMVC已经提供了,为CommonsMultipartResolver
2.具体步骤:
a)导入jar包
文件上传与下载——SpringMVC框架系列教程(11)
b)springmvc.xml配置CommonsMultipartResolver



	
	
	
	

c)编写controller上传代码
jsp页面:
文件上传与下载——SpringMVC框架系列教程(11)
controller:

@RequestMapping("testUpload")
public String testUpload(MultipartFile file,HttpServletRequest request) throws Exception {
	// 判断文件是否为空,空则返回错误页面
	if (file.isEmpty()) {
		return "error";
	}
	// 获取文件存储路径(绝对路径)
	String path = request.getServletContext().getRealPath("/WEB-INF/upload");
	// 获取原文件名
	String fileName = file.getOriginalFilename();
	// 创建文件实例
	File filePath = new File(path, fileName);
	// 如果文件目录不存在,创建目录
	if (!filePath.getParentFile().exists()) {
		filePath.getParentFile().mkdirs();
		System.out.println("创建目录" + filePath);
	}
	// 写入文件
	file.transferTo(filePath);
	return "success";
}

[v_tips]注意:一般情况文件名是需要修改保证唯一性,则可以使用UUID生成[/v_tips]

ad

程序员导航

优网导航旗下整合全网优质开发资源,一站式IT编程学习与工具大全网站

d)测试
文件上传与下载——SpringMVC框架系列教程(11)
文件上传与下载——SpringMVC框架系列教程(11)
[v_warn]注意:tomcat重启,上传的文件会被清除,原因在于eclipse会重新部署项目,在实际开发中不会存在清除情况。[/v_warn]

二、文件下载

[v_act]方式一:[/v_act]

/*
 * 下载方式一:
 * ①获取前台要下载的文件名称
 * ②设置响应类型
 * ③设置下载页显示的文件名
 * ④获取下载文件夹的绝对路径和文件名合并为File类型
 * ⑤将文件复制到浏览器
 */
@RequestMapping("download")
@ResponseBody
public void download(HttpServletRequest req, HttpServletResponse resp, String filename) throws Exception {
	System.out.println("开始下载文件:"+filename);
	String realPath = req.getServletContext().getRealPath("/WEB-INF/upload");//获取下载文件的路径
	File file = new File(realPath, filename);//把下载文件构成一个文件处理   filename:前台传过来的文件名称

	//设置响应类型  ==》 告诉浏览器当前是下载操作,我要下载东西
	resp.setContentType("application/x-msdownload");
	//设置下载时文件的显示类型(即文件名称-后缀)   URLEncoder防止中文文件名显示乱码
	resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));

	//下载文件:将一个路径下的文件数据转到一个输出流中,也就是把服务器文件通过流写(复制)到浏览器端
	Files.copy(file.toPath(), resp.getOutputStream());//Files.copy(要下载的文件的路径,响应的输出流)
}

[v_act]方式二:[/v_act]

/*
 * 下载方式二:Spring框架技术
 */
@RequestMapping(value = "download")
public ResponseEntity download(HttpServletRequest request,String filename) throws IOException {
	String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");//获取下载文件的路径
	File file = new File(realPath, filename);//把下载文件构成一个文件处理   filename:前台传过来的文件名称

	HttpHeaders headers = new HttpHeaders();//设置头信息
	String downloadFileName = new String(filename.getBytes("UTF-8"), "iso-8859-1");//设置响应的文件名

	headers.setContentDispositionFormData("attachment", downloadFileName);
	headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

	// MediaType:互联网媒介类型 contentType:具体请求中的媒体类型信息
	return new ResponseEntity(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
}
© 版权声明

相关文章

暂无评论

暂无评论...