SpringMVC文件下载
本文内容纲要:
文件上传完毕返回页面用Model对象带回filename,在webapps的该应用目录下,已经存在上传文件。
页面
1<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
2pageEncoding="UTF-8"%>
3<!DOCTYPEhtml>
4<html>
5<head>
6<metacharset="UTF-8">
7<title>Inserttitlehere</title>
8</head>
9<body>
10<h2>用户注册</h2>
11<formaction="register"enctype="multipart/form-data"method="post">
12<table>
13<tr>
14<td>用户名:</td>
15<td><inputtype="text"name="username"></td>
16</tr>
17<tr>
18<td>请上传头像:</td>
19<td><inputtype="file"name="image"></td>
20</tr>
21<tr>
22<td><inputtype="submit"value="注册"></td>
23</tr>
24</table>
25</form>
26
27<scripttype="text/javascript">
28functiontest(){
29varfilename=document.getElementById("filename");
30alert(encodeURIComponent(filename));
31}
32</script>
33
34<h3>文件下载</h3>
35<ahref="javascript:window.location.href='download?filename='+
36encodeURIComponent('${requestScope.filename}')">
37${requestScope.filename}
38</a>
39</body>
40</html>
文件上传与下载
SpringMVC提供了一个ResponseEntity类型,使用它可以很方便定义返回的BodyBuilder、HttpHeaders、HttpStatus。
2publicStringregister(HttpServletRequestrequest,@ModelAttributeUseruser,Modelmodel)throwsIllegalStateException,IOException{
3System.out.println(user.getUsername());
4//如果上传文件部位空,写入上传文件路径
5if(!user.getImage().isEmpty()){
6//上传路径
7Stringpath=request.getServletContext().getRealPath("/images");
8//上传文件名
9Stringfilename=user.getImage().getOriginalFilename();
10Filefilepath=newFile(path,filename);
11//判断路径是否存在,不存在就创建一个
12if(!filepath.getParentFile().exists()){
13filepath.getParentFile().mkdirs();
14}
15//将上传文件保存到一个目标文件中
16user.getImage().transferTo(newFile(path+File.separator+filename));
17//将文件名保存到model中
18model.addAttribute("filename",filename);
19System.out.println("文件上传路径:"+(path+File.separator+filename));
20return"userInfo";
21}else{
22return"error";
23}
24}
25
26@RequestMapping(value="/download")
27publicResponseEntity<byte[]>download(HttpServletRequestrequest,@RequestParam("filename")Stringfilename,
28@RequestHeader("User-Agent")StringuserAgent)throwsIOException{
29//下载文件的路径
30Stringpath=request.getServletContext().getRealPath("/images");
31//构建File
32Filefile=newFile(path+File.separator+filename);
33//ok表示http请求中状态码200
34BodyBuilderbuilder=ResponseEntity.ok();
35//内容长度
36builder.contentLength(file.length());
37//application/octet-stream二进制数据流(最常见的文件下载)
38builder.contentType(MediaType.APPLICATION_OCTET_STREAM);
39//使用URLEncoding.decode对文件名进行解码
40filename=URLEncoder.encode(filename,"UTF-8");
41//根据浏览器类型,决定处理方式
42if(userAgent.indexOf("MSIE")>0){
43builder.header("Content-Disposition","attachment;filename="+filename);
44}else{
45builder.header("Content-Disposition","attacher;filename*=UTF-8''"+filename);
46}
47returnbuilder.body(FileUtils.readFileToByteArray(file));
48}
FileUtils类是ApacheCommonsFileUpload组件,用于读取文件,并将其构建为ResponseEntity对象。
本文内容总结:
原文链接:https://www.cnblogs.com/alphajuns/p/11067912.html