springboot 文件上传

前言

用户访问当前系统,将自己本地计算机中文件通过浏览器上传到当前系统所在的服务器过程中称之为文件的上传

具体思路

1.文件上传
文件上传: 用户将本地计算机中文件上传到服务器过程称之为文件上传
2.文件上传开发思路:

  • a.提供一张上传页面 提交方式必须:post enctype属性必须为 multipart/form-data
  • b.开发上传controller

第一种文件上传方式

整体做法

准备上传页面

 <form action="${pageContext.request.contextPath}/file/upload" method="post" enctype="multipart/form-data">

        <input type="file" name="file">
        <input type="submit" value="上传文件">
</form>
<!--
	1. 表单提交方式必须是post
	2. 表单的enctype属性必须为multipart/form-data
	3. 后台接受变量名字要与文件选择name属性一致
-->

当用户选择一个文件并点击“上传文件”按钮时,会向 /file/upload 接口发送一个 POST 请求,并携带上传的文件。

编写控制器

 @RequestMapping("upload")
    public String upload(MultipartFile file, HttpServletRequest request) throws IOException {
   //定义:接收文件对象 multipartFile file变量名要与form中input type="file"标签name属性名一致
        //文件名
        String originalFilename = file.getOriginalFilename(); //得到文件名字
        log.debug("文件名: {}", originalFilename);
        log.debug("文件大小: {}", file.getSize());
        log.debug("文件类型: {}", file.getContentType());

        //1.根据相对 上传 "upload" 获取绝对路径(真实路径) /users/桌面....   服务器: /home/springboot_day4..
        String realPath = request.getSession().getServletContext().getRealPath("/upload");
        log.debug("获取绝对路径: {}", realPath);

        //2.上传文件  参数1: 将文件写入到那个目录 aa.txt  .md xxx.xxx.xxx.md
        //修改文件名
        String ext = originalFilename.substring(originalFilename.lastIndexOf("."));
        String newFileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + ext;
        file.transferTo(new File(realPath, newFileName));

        return "redirect:/upload.jsp";
    }

接收前端上传的文件,并获取文件的相关信息。
生成新的文件名,并保存文件到服务器上指定的目录下。
上传成功后,重定向到 /upload.jsp 页面

修改文件上传大小

  servlet:
    multipart:   #修改文件上传的大小限制
      max-request-size: 120MB #运行请求传递文件大小最大为10M
      max-file-size: 120MB     #运行服务器可以处理的最大文件大小

第二种文件上传

因为springboot推荐使用jar包的项目部署,我们第二种方式无论是jar包和war部署都能够找到文件上传的目录

准备上传页面

<form action="${pageContext.request.contextPath}/file/upload" method="post" enctype="multipart/form-data">

        <input type="file" name="file">
        <input type="submit" value="上传文件">
</form>
<!--
	1. 表单提交方式必须是post
	2. 表单的enctype属性必须为multipart/form-data
	3. 后台接受变量名字要与文件选择name属性一致
-->

编写控制器

 @Value("${file.upload.dir}")
    private String realPath;
    /**
     * 第二种文件上传
     * 注意: 这种方式适用于任何一种部署方式 推荐使用这种方式
     * @param file
     * @return
     * @throws IOException
     */
    @RequestMapping("uploadByJarDeploy")
    public String uploadByJarDeploy(MultipartFile file) throws IOException {
   
        //文件名
        String originalFilename = file.getOriginalFilename();
        log.debug("文件名: {}", originalFilename);
        log.debug("文件大小: {}", file.getSize());
        log.debug("文件类型: {}", file.getContentType());

        //改名
        String ext = originalFilename.substring(originalFilename.lastIndexOf("."));
        String newFileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + ext;


        //上传文件到哪
        file.transferTo(new File(realPath,newFileName));

        return  "redirect:/upload.jsp";
    }

指定文件上传路径

#指定文件上传的位置
file:
  upload:
    dir: D:\Study\java\practical-projects\spring-boot\springbootAopTest\src\main\webapp\upload  //这里就是你自己服务器的具体目录

总结

为什么我要介绍两种上传思路,就是因为在我们springboot中推荐使用jar包,War包文件代表了一个Web应用程序,把WAR文件作为部署单元来使用,主要是自带本地的Tomcat,但springboot内部集成了tomcat,如果用第一种方式,当项目打包到服务器的时候,目录结构就会发生变化,使用了第二种方式之后,我们就根据自己的需求配置文件上传的目录。

相关推荐

  1. springboot 文件

    2024-02-02 18:34:01       46 阅读
  2. springboot文件

    2024-02-02 18:34:01       42 阅读
  3. SpringBoot文件夹

    2024-02-02 18:34:01       33 阅读
  4. SpringBoot 下载文件

    2024-02-02 18:34:01       60 阅读
  5. SpringBoot RestTemplate 文件

    2024-02-02 18:34:01       55 阅读
  6. 文件结合springboot

    2024-02-02 18:34:01       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-02 18:34:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-02 18:34:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-02 18:34:01       82 阅读
  4. Python语言-面向对象

    2024-02-02 18:34:01       91 阅读

热门阅读

  1. vue 深度作用选择器 >>>、/deep/、::v-deep

    2024-02-02 18:34:01       48 阅读
  2. Redis简介和数据类型

    2024-02-02 18:34:01       62 阅读
  3. MYSQL Case When搜索查询

    2024-02-02 18:34:01       51 阅读
  4. Android创建服务和发送邮件

    2024-02-02 18:34:01       44 阅读
  5. 一文详解RTSP协议:流媒体传输控制协议

    2024-02-02 18:34:01       56 阅读
  6. 正则group分组提取关键信息

    2024-02-02 18:34:01       51 阅读
  7. 什么是线程安全,你了解吗?

    2024-02-02 18:34:01       59 阅读
  8. Spring全局异常处理

    2024-02-02 18:34:01       60 阅读
  9. 洛谷P2670扫雷游戏

    2024-02-02 18:34:01       58 阅读
  10. 数据可视化:让数据“活”起来

    2024-02-02 18:34:01       53 阅读
  11. 用 Footprint 的交易类型标签揭秘链上交易

    2024-02-02 18:34:01       50 阅读