首页 > 其他分享 >springboot3.1.5+文件上传+文件下载

springboot3.1.5+文件上传+文件下载

时间:2023-11-08 15:26:26浏览次数:29  
标签:springboot3.1 文件 String filename new 上传 下载

idea创建项目springbootdemo-download-upload

  • 加上thymeleaf模板maven依赖
  • application.properties配置
# thymeleaf页面缓存设置(默认为true)
spring.thymeleaf.cache=false
# 单个上传文件大小限制(默认1MB)
spring.servlet.multipart.max-file-size=10MB
# 总上传文件大小限制(默认10MB)
spring.servlet.multipart.max-request-size=50MB

文件上传前端表单upload.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>动态添加文件上传列表</title>
  <link href="css/bootstrap.min.css" rel="stylesheet">
  <script src="js/jquery-3.4.1.js"></script>
  <script>
    function add(){
      var innerdiv = "<div>";
      innerdiv += "<input type='file' name='fileUpload' required='required'>" +
              "<input type='button' value='删除' onclick='remove(this)'>";
      innerdiv +="</div>";
      $("#file").append(innerdiv);
      $("#submit").css("display","block");
    }
    function remove(obj) {
      $(obj).parent().remove();
      if($("#file div").length ==0){
        $("#submit").css("display","none");
      }
    }

  </script>
</head>
<div th:if="${uploadStatus}" style="color: red" th:text="${uploadStatus}">
  上传成功</div>
<form th:action="@{/uploadFile}" method="post" enctype="multipart/form-data">
  上传文件:&nbsp;&nbsp;
  <input type="button" value="添加文件" onclick="add()"/>
  <div id="file" style="margin-top: 10px;" th:value="文件上传区域">  </div>
  <input id="submit" type="submit" value="上传"
         style="display: none;margin-top: 10px;"/>
</form>
</body>
</html>

文件上传后端springboot的controller

@RequestMapping("/toUpload")
    public String toUpload(){
        return "upload";
    }



    // 文件上传管理
    @PostMapping("/uploadFile")
    public String uploadFile(MultipartFile[] fileUpload, Model model) {
        // 默认文件上传成功,并返回状态信息
        model.addAttribute("uploadStatus", "上传成功!");
        for (MultipartFile file : fileUpload) {
            // 获取文件名以及后缀名
            String fileName = file.getOriginalFilename();
            // 重新生成文件名(根据具体情况生成对应文件名)
            fileName = UUID.randomUUID()+"_"+fileName;

            // 指定上传文件本地存储目录,不存在需要提前创建
            // 应该也可以是相对路径,自己找
            String dirPath = "C:/Users/Desktop/";//需要自己写
            File filePath = new File(dirPath);
            if(!filePath.exists()){
                filePath.mkdirs();
            }
            try {
                file.transferTo(new File(dirPath+fileName));
            } catch (Exception e) {
                e.printStackTrace();
                // 上传失败,返回失败信息
                model.addAttribute("uploadStatus","上传失败: "+e.getMessage());
            }
        }
        // 携带上传状态信息回调到文件上传页面
        return "upload";
    }

文件下载

  • 添加文件下载的FileUtils工具类
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.11.0</version>
        </dependency>

前端下载

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>文件下载</title>
</head>
<body>
<div style="margin-bottom: 10px">文件下载列表:</div>
<table>
    <tr>
        <td>9010094_s.jpg</td>
        <td><a th:href="@{/download(filename='9010094_s.jpg')}">下载文件</a></td>
    </tr>
    <tr>
        <td>第5章 SpringBoot实现Web开发.ppt</td>
        <td><a th:href="@{/download(filename='第5章 SpringBoot实现Web开发.ppt')}">
            下载文件</a></td>
    </tr>
</table>
</body>
</html>

springboot后端controller路由

@RequestMapping("/todownload")
    public String todownload(){
        return "download";
    }

    // 文件下载管理
    // 这个是比较简单的接受下载,没有中文编码的处理
    @GetMapping("/ddownload")
    public ResponseEntity<byte[]> fileDownload(String filename){
        // 指定要下载的文件根路径
        String dirPath = "C:\\Users\\Desktop/";
        // 创建该文件对象
        File file = new File(dirPath + File.separator + filename);
        // 设置响应头
        HttpHeaders headers = new HttpHeaders();
        // 通知浏览器以下载方式打开
        headers.setContentDispositionFormData("attachment",filename);
        // 定义以流的形式下载返回文件数据
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        try {
            return new ResponseEntity<>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
        } catch (Exception e) {
            e.printStackTrace();
            return new ResponseEntity<byte[]>(e.getMessage().getBytes(), HttpStatus.EXPECTATION_FAILED);
        }
    }


    // 所有类型文件下载管理
    @GetMapping("/download")
    public ResponseEntity<byte[]> fileDownload(HttpServletRequest request,
                                               String filename) throws Exception{
        // 指定要下载的文件根路径
        String dirPath = "C:/Users/Desktop/download/";
        // 创建该文件对象
        File file = new File(dirPath + File.separator + filename);
        // 设置响应头
        HttpHeaders headers = new HttpHeaders();
        // 通知浏览器以下载方式打开(下载前对文件名进行转码)
        filename=getFilename(request,filename);
        headers.setContentDispositionFormData("attachment",filename);
        // 定义以流的形式下载返回文件数据
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        try {
            return new ResponseEntity<>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
        } catch (Exception e) {
            e.printStackTrace();
            return new ResponseEntity<byte[]>(e.getMessage().getBytes(),HttpStatus.EXPECTATION_FAILED);
        }
    }
    // 根据浏览器的不同进行编码设置,返回编码后的文件名
    private String getFilename(HttpServletRequest request, String filename)
            throws Exception {
        // IE不同版本User-Agent中出现的关键词
        String[] IEBrowserKeyWords = {"MSIE", "Trident", "Edge"};
        // 获取请求头代理信息
        String userAgent = request.getHeader("User-Agent");
        for (String keyWord : IEBrowserKeyWords) {
            if (userAgent.contains(keyWord)) {
                //IE内核浏览器,统一为UTF-8编码显示,并对转换的+进行更正
                return URLEncoder.encode(filename, "UTF-8").replace("+"," ");
            }
        }
        //火狐等其它浏览器统一为ISO-8859-1编码显示
        return new String(filename.getBytes("UTF-8"), "ISO-8859-1");
    }

标签:springboot3.1,文件,String,filename,new,上传,下载
From: https://www.cnblogs.com/maoshine/p/17817450.html

相关文章

  • yarn : 无法加载文件 ***,因为在此系统上禁止运行脚本。
      关于这个问题,PowerShell脚本的执行有着严格的安全策略限制!只需要修改以下策略即可,“管理员身份启动”WindowsPowerShell修改执行策略,输入指令:set-ExecutionPolicyRemoteSigned,如下图:  再通过yarn执行打包构建项目工程就可以了!!!   翻译搜索复制......
  • IBIS文件实用案例
    IBIS建模——第1部分:为何IBIS建模对设计成功至关重要什么是IBIS模型?IBIS表示输入/输出缓冲器信息规范。它代表了IC供应商提供给客户进行高速设计仿真的器件的数字引脚的特性或行为。这些模型使用IBIS开放论坛——负责管理和更新IBIS模型规范与标准的行业组织——所规定的参数模......
  • 错误:类文件具有错误的版本 61.0, 应为 52.0
    1.问题在使用Maven项目进行SpringBoot的配置时,2.原因我是用的jdk1.8,SpringBoot用的3.1.2,经查阅资料,因为Spring官方发布从Spring6以及SprinBoot3.0开始最低支持JDK17所以这里报错的原因是jdk1.8和SpringBoot3.0版本以上的冲突3.解决在项目解决修改模块SDK为JDK17以上即可。......
  • C语言程序设计 第八章 文件
    本节是学习C语言文件:文件的类型,文件的读写。 下载图片格式的课件(PPT课件转换为JPG图片)(以图片方式查看,可以在MP4上查看) 下载Powerpoint课件(在装有PowerPoint的计算机上可以打开使用)......
  • VUE上传文件夹的三种解决方案
     本文章向大家介绍VUE上传文件夹的三种解决方案,主要内容包括上传分步:、直接上代码、使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。 ​对于大文件的处理,无论是用户端还是服务端,如果一次性进行读取发送、接收都是不可取,很......
  • nginx文件服务器根据文件类型判断预览还是下载
    location/file{charsetutf-8;alias/usr/share/nginx/html/files;autoindexoff;autoindex_exact_sizeoff;autoindex_localtimeon;add_header'Access-Control-Allow-Origin''*'always;add_header'Acce......
  • uni-app上传图片后bold转base64
    uni.chooseImage({count:1,//图片张数success:asyncres=>{constreader=newFileReader();reader.readAsDataURL(res.tempFiles[0]);reader.onload=async(e)=>{console.log(e.target.result)//e.target.result转换后的base64......
  • Mac——MAC笔记本本地音频文件如何添加图标?
    在Mac上的“音乐”App  中,选择边栏中的一个播放列表。执行以下一项操作:点按播放列表左上方的插图区域,然后选取一个图像文件。将一个图像文件拖到插图区域。点按“完成”。   我自己的操作记录:本地音乐文件没有图标,就想要加上图标,文件-comd+i实现文......
  • PE文件结构
    导入表typedefstruct_IMAGE_IMPORT_DESCRIPTOR{union{DWORDCharacteristics;//0forterminatingnullimportdescriptorDWORDOriginalFirstThunk;//RVA指向INT(PIMAGE_THUNK_DATA结构数组)}DUMMYUNIONNAME;......
  • PMP-5.3.1 管理质量文件--质量报告、测试与评估文件、变更
    一、质量报告1.定义​质量报告可能是图形、数据或定性文件。2.作用(1)​其中包含的信息可帮助其他过程和部门采取纠正措施,以实现项目质量期望。(2)质量报告用于识别不合规的卖方过程、程序或产品。(控制采购过程)3.​质量报告的信息可以包含:(1)团队上报的质量管理问题由团队管......