springboot业务功能实战(十五)以流的方式对文件上传下载

举报
小鲍侃java 发表于 2021/09/10 23:33:48 2021/09/10
【摘要】 java @Controllerpublic class FileController { @RequestMapping(value = "/fileuploads") public String toFileUpload() { return "fileupload"; } @Request...
  • java

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

  
  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. }

  
  1. function check() {
  2. var file = document.getElementById("file");
  3. if (file.value == "") {
  4. alert("上传的文件为空")
  5. return false;
  6. }
  7. return true;
  8. }
  • 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. <div id="main2" style="width:500px; margin: 0 auto;">
  8. </div>

文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。

原文链接:baocl.blog.csdn.net/article/details/101749711

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。