以流的方式对文件上传下载,并保存指定位置

简介: 以流的方式对文件上传下载,并保存指定位置


image.png

本方法是将文件以流的方式,下载到指定的路径。

1.java代码

1. @Controller
2. public class FileController {
3. 
4. @RequestMapping(value = "/fileuploads")
5. public String toFileUpload() {
6. return "fileupload";
7.     }
8. 
9. @RequestMapping(value = "/fileupload")
10. public String fileUpload(@RequestParam(value = "file") List<MultipartFile> files, HttpServletRequest request) {
11. String msg = "";
12. // 判断文件是否上传
13. if (!files.isEmpty()) {
14. // 设置上传文件的保存目录
15. String basePath = request.getServletContext().getRealPath("/upload/");
16. // 判断文件目录是否存在
17. File uploadFile = new File(basePath);
18. if (!uploadFile.exists()) {
19.                 uploadFile.mkdirs();
20.             }
21. for (MultipartFile file : files) {
22. String originalFilename = file.getOriginalFilename();
23. if (originalFilename != null && !originalFilename.equals("")) {
24. try {
25. // 对文件名做加UUID值处理
26.                         originalFilename = UUID.randomUUID() + "_" + originalFilename;
27.                         file.transferTo(new File(basePath + originalFilename));
28.                     } catch (IOException e) {
29.                         e.printStackTrace();
30.                         msg = "文件上传失败!";
31.                     }
32.                 } else {
33.                     msg = "上传的文件为空!";
34.                 }
35.             }
36.             msg = "文件上传成功!";
37.         } else {
38.             msg = "没有文件被上传!";
39.         }
40.         request.setAttribute("msg", msg);
41. return "chatroom";
42.     }
43. 
44. @ExceptionHandler(MaxUploadSizeExceededException.class)
45. public String handException(MaxUploadSizeExceededException e, HttpServletRequest request) {
46. //        System.out.println("我捕获了异常");
47.         request.setAttribute("msg", "文件超过了指定大小,上传失败!");
48. return "fileupload";
49.     }
50. 
51. 
52. @RequestMapping(value = "/filedownload")
53. public String toFileDownload(HttpServletRequest request) {
54. return "filedownload";
55.     }
56. 
57. @RequestMapping(value = "/fileList")
58. @ResponseBody
59. public String fileList(HttpServletRequest request) {
60. String baseDir = request.getServletContext().getRealPath("/upload");
61. File baseFile = new File(baseDir);
62.         List<String> fileList = null;
63. if (baseFile.exists()) {
64.             File[] files = baseFile.listFiles();
65.             fileList = new ArrayList<>(files.length);
66. for (File file : files) {
67.                 fileList.add(file.getName());
68.             }
69.         }
70. //        System.out.println(fileList.toString());
71. String json = JSON.toJSONString(fileList);
72. return json;
73.     }
74. 
75. 
76. @RequestMapping(value = "/download")
77. public ResponseEntity<byte[]> fileDownload(String filename, HttpServletRequest request) throws IOException {
78. String path = request.getServletContext().getRealPath("/upload/");
79. File file = new File(path + filename);
80.         System.out.println("转码前" + filename);
81.         filename = this.getFilename(request, filename);
82.         System.out.println("转码后" + filename);
83. // 设置响应头通知浏览器下载
84. HttpHeaders headers = new HttpHeaders();
85. // 将对文件做的特殊处理还原
86.         filename = filename.substring(filename.indexOf("_") + 1);
87.         headers.setContentDispositionFormData("attachment", filename);
88.         headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
89. return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
90.     }
91. 
92. // 根据不同的浏览器进行编码设置,返回编码后的文件名
93. public String getFilename(HttpServletRequest request, String filename) throws UnsupportedEncodingException {
94.         String[] IEBrowerKeyWords = {"MSIE", "Trident", "Edge"};
95. String userAgent = request.getHeader("User-Agent");
96. for (String keyword : IEBrowerKeyWords) {
97. if (userAgent.contains(keyword)) {
98. return URLEncoder.encode(filename, "UTF-8");
99.             }
100.         }
101. return new String(filename.getBytes("UTF-8"), "ISO-8859-1");
102.     }
103. 
104. 
105. }
1. $(function(){
2.    var targer = $("#main2")
3.    $.ajax({
4.      url: "fileList",
5.      dataType: "json",
6.      success: function (data) {
7.        for (var i in data) {
8.          var a = $("<a></a><br>").text(data[i].substring(data[i].indexOf("_")+1))
9.          a.attr("href", "${pageContext.request.contextPath}/download?filename="+encodeURIComponent(data[i]))
10.           targer.append(a)
11.           alert(targer)
12.         }
13.       }
14.     })
15.   }

2.js代码

1. function check() {
2.    var file = document.getElementById("file");
3.    if (file.value == "") {
4.      alert("上传的文件为空")
5.      return false;
6.    }
7.    return true;
8.  }

3.jsp代码

1. <div id="main" style="width:500px; margin: 0 auto;">
2.        <form action="fileupload" method="post" enctype="multipart/form-data" onsubmit="return check()">
3.          <input type="file" name="file" id="file" multiple="multiple"><br>
4.          <input type="submit" value="上传">
5.        </form>
6.      </div>
7. 
8.      <div id="main2" style="width:500px; margin: 0 auto;">
9. 
10.       </div>


相关文章
|
缓存
idea更改默认缓存位置步骤
在idea使用中,会产生大量的缓存,一般默认存放在C盘里面,会加大C盘的储存负担,如果C盘足够大,可以不考虑更改idea的缓存位置
2011 0
idea更改默认缓存位置步骤
|
7月前
|
JSON 算法 Java
项目中不同位置资源文件读取的几种方式
项目中不同位置资源文件读取的几种方式
34 0
|
9月前
|
JavaScript
用nodejs实现向文件的固定位置插入内容
用nodejs实现向文件的固定位置插入内容
83 0
|
10月前
|
安全 数据安全/隐私保护
文档的保存和打印
3.8 文档的保存与打印 3.8.1 防止文档内容丢失 1. 自动恢复 Word提供自动恢复功能,可在很大程度上避免因为停电、机器死机等问题引发的文档丢失现象。在“文件”选项卡中的“选项”命令,在其中的“保存”选项卡中设置,默认10分钟,可以修改(1-120分钟)。 2. 自动备份文档副本 在编辑Word文档时,如果不小心保存了不需要的信息,或者原文档损坏,可以使用文档备份的副本避免损失。当然,这需要你事先在Word系统设置了“始终创建备份副本”功能,具体操作如下: 1单击“文件”选项卡,选择“选项”命令,打开对话框设置。 2选择此选项可在每次保存文档时创建一个文档的备份副本扩展名为 .wbk
|
11月前
|
存储 Java
Java实现文件上传到本地(自定义保存路径)
Java实现文件上传到本地(自定义保存路径)
661 0
|
开发者 Python Windows
文件的读取方式 | 学习笔记
快速学习 文件的读取方式
81 0
文件的读取方式 | 学习笔记
成功解决WIN系统如何更改默认放在C盘的【我的文档】/【图片】位置的存储路径(修改到其它非系统的盘符)
成功解决WIN系统如何更改默认放在C盘的【我的文档】/【图片】位置的存储路径(修改到其它非系统的盘符)
成功解决WIN系统如何更改默认放在C盘的【我的文档】/【图片】位置的存储路径(修改到其它非系统的盘符)
|
C语言
【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 追加键值对数据 | 更新键值对数据 )
【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 追加键值对数据 | 更新键值对数据 )
114 0
一个H264流,保存成多个文件需要注意的两个问题
一个H264流,保存成多个文件需要注意的两个问题
157 0
dwz框架新建更新后对原表格刷新
dwz框架新建更新后对原表格刷新
138 0