【SpringBoot】简单的文件上传和文件下载以及图片回显

这篇具有很好参考价值的文章主要介绍了【SpringBoot】简单的文件上传和文件下载以及图片回显。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

介绍

这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长!

以下为小编最喜欢的两句话:

要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。

一个人为什么要努力? 我见过最好的答案就是:因为我喜欢的东西都很贵,我想去的地方都很远,我爱的人超完美。因此,小编想说:共勉! 


目录

前言

一、文件上传与下载

1、文件上传

第一步:pom.xml

第三步:在全局配置文件中添加文件上传的相关配置

第四步:进行文件上传处理,实现文件上传功能

二、回显图片

第一步:创建并编写图片回显页面

三、文件下载

第一步:添加文件下载依赖

第二步:创建文件下载页面

第三步:创建控制器


一、文件上传与下载


​ 在开发Web应用时,文件上传和下载是很常见的一个需求。浏览器通过表单形式将文件以流的形式传递给服务器,服务器再对上传的数据进行解析处理。下载文件通过 IO 流实现,大多数框架并没有对文件下载进行封装处理,并且文件下载时涉及不同浏览器的解析处理,可能会出现中文乱码的情况。

1、文件上传


实现文件上传,需要满足三个条件。

1、表单提交方式必须是 POST
2、表单需要设置 enctype 属性,且值为 multipart/form-data
3、表单需要设置一个文件域,也就是表单项 type = "file"

第一步:pom.xml


注意:SpringBoot并没有提供文件上传所需要的 jar 包或依赖,需要再项目中加入文件上传的相关 jar 包或 maven 依赖,如图所示:

springboot关于文件上传与回显,springboot,java,前端,开发语言,spring boot

 下面是依赖包:

(注意:看你创建的springboot项目是什么版本的,如果你jdk使用的是1.8,那么创建项目的时候就要选择2.7.8或者2.7.9,这个时候使用下面的依赖版本是没有冲突的,因为小编也是使用的2.7.8,如果使用3及3以上的版本出现问题的话,可以考虑是不是包冲突了)

        <!--文件上传-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.5</version>
        </dependency>

第二步: 编写文件上传的表单页面

在项目中的 resources/templates 目录创建一个名为 upload.html 页面

<form th:action="@{/upload}" method="post" enctype="multipart/form-data">
    <div>
        <label>选择文件:</label>
        <input type="file" name="attach"/>
    </div>
    <div style="margin-top:20px">
        <input type="submit" value="确认上传"/>
    </div>
</form>

第三步:在全局配置文件中添加文件上传的相关配置

application.properties

  #设置单个文件大小
  spring.servlet.multipart.max-file-size=50MB
  #设置总上传数据大小
  spring.servlet.multipart.max-request-size=50MB

  #自定义属性
  #设置文件上传位置(绝对路径)
  file.upload.path=d:/

  #设置文件上传后回显位置(相对路径)
  file.upload.path.relative=/**
  # 这是连接数据库8.0及以上的版本,如果是5版本就不需要加cj,在url中不需要加时区,8版本不加时区的话 
  # 可能会报时区的问题

  spring.datasource.driver-class-name= com.mysql.cj.jdbc.Driver
  datasource.url= localhost:3306/testdb
  spring.datasource.url= jdbc:mysql://${datasource.url}? 
  useSSL=false&useUnicode=true&characterEncoding=utf- 
  8&allowMultiQueries=true&autoReconnect=true&maxReconnects=10&serverTimezone=UTC
  spring.datasource.username= root
  spring.datasource.password= root

需要注意的是,通过 spring.servlet.multipart.max-file-size 属性设置单个上传文件的大小限制,默认1MB,通过spring.servlet.multipart.max-request-size 属性设置所有上传文件的大小限制,默认为 10MB。开发过程中,需要结合实际需求合理设置文件大小。

第四步:进行文件上传处理,实现文件上传功能

在 controller 包下创建控制器

package com.lyn.controller;

  import org.apache.commons.io.FilenameUtils;

  import org.springframework.beans.factory.annotation.Value;

  import org.springframework.stereotype.Controller;

  import org.springframework.ui.Model;

  import org.springframework.web.bind.annotation.RequestMapping;

  import org.springframework.web.multipart.MultipartFile;

  

  import java.io.File;

  import java.io.IOException;

  import java.text.SimpleDateFormat;

  import java.util.Date;

  import java.util.UUID;

  

  @Controller

  public class FileController{

    // 文件上传位置

    @Value("${file.upload.path}")

    private String filePath;

  

    /**

     * 向文件上传页面跳转

     * @return

     */

    @RequestMapping("/toUpload")

    public String toUpload(){

        return "upload";

    }

  

    /**

     * 文件上传

     * @param attach

     * @param model

     * @return

     */

    @RequestMapping("/upload")

    public String upload(MultipartFile attach, Model model){

        // 判断文件是否为空,不为空则进行文件上传

        if(!attach.isEmpty()){

            // 获取源文件名称

            String fileName = attach.getOriginalFilename();

            // 获取源文件后缀名

            String suffix = FilenameUtils.getExtension(fileName);

            // 使用UUID重命名文件名称

            String newFileName = UUID.randomUUID().toString().replace("-","")+(".")+suffix;

            // 使用日期解决同一文件夹中文件过多问题(以当前日期命名文件夹)

            String datePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date());

            // 组装最终文件名

            String finalName = datePath+"/"+newFileName;

            // 构建文件对象

            File dest = new File(filePath + finalName);

            // 判断该文件夹是否存在,不存在则创建

            if(!dest.getParentFile().exists()){

                dest.getParentFile().mkdirs(); // 创建文件夹

            }

            try{

                // 将文件保存到硬盘

                attach.transferTo(dest);

                // 将当前图片放到模型中,便于页面回显

                model.addAttribute("image",finalName);

            }catch(IOException e){

                e.printStackTrace();

            }

        }

        // 返回页面(该页面是templates目录下的页面)

        return "show";

    }

}

第五步:测试

http://localhost:8080/toUpload

二、回显图片

如果上传的文件是图片,且需要在页面中将图片显示,则需要对图片进行数据回显,需要完成两个步骤,分别是:

第一步:创建并编写图片回显页面

在项目中的 resources/templates 目录下创建 show.html 页面,代码如下所示:

<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org">

<head>

    <meta charset="UTF-8">

    <title>图片回显</title>

</head>

<body>

    <img th:src="@{'/'+${image}}"/>

</body>

</html>

创建并编写文件上传配置类

第二步:在项目中的 config 包下新建 UploadConfig 类

package com.lyn.config;

  import org.springframework.beans.factory.annotation.Value;

  import org.springframework.context.annotation.Configuration;

  import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;

  import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

  

  @Configuration

  public class UploadConfig implements WebMvcConfigurer {

    // 上传地址

    @Value("${file.upload.path}")

    private String filePath;

  

    // 显示相对地址

    @Value("${file.upload.path.relative}")

    private String fileRelativePath;

  

  
    //地址映射 url地址与本地磁盘地址映射

    @Override

    public void addResourceHandlers(ResourceHandlerRegistry registry){

        // 读取本地文件需要加上 file:/    
    registry.addResourceHandler(fileRelativePath).addResourceLocations("file:/"+filePath);

    }

}

三、文件下载

在Web开发中,文件下载能够通过IO流实现,所以多数框架并没有对文件下载进行封装处理。文件下载时涉及不同浏览器的解析处理,可能会出现中文乱码情况,并且不同浏览器之间的解析处理方式也会有所不同,例如谷歌和IE浏览器。

第一步:添加文件下载依赖

在 pom.xml 文件中引入文件下载的工具依赖 commons-io,还是需要注意版本的兼容性

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

第二步:创建文件下载页面

在 resuources/templates 目录下创建 download.html 页面,代码如下:

<h2>文件下载</h2>
<!-- 注意:这个路径是你自己上传文件的文件夹,比如小编的就在d盘有一个2023-02-20的文件夹-->
<a th:href="@{2023-02-20/1.jpg}" download="1.jpg">html页面下载</a>
</body>

如图:

springboot关于文件上传与回显,springboot,java,前端,开发语言,spring boot

 springboot关于文件上传与回显,springboot,java,前端,开发语言,spring boot

第三步:创建控制器

将方法写在文件上传的controller中

  /**
 * 文件下载的两种方式,使用其中一种下载即可
 */
@RequestMapping("/download")
    public String downLoad(){
        return "download";
    }

    @GetMapping("/t3")
    public ResponseEntity<ByteArrayResource> down3() throws Exception {
        byte[] bytes = Files.readAllBytes(new File("d:\\2023-02-20\\1.jpg").toPath());
        ByteArrayResource bar = new ByteArrayResource(bytes);
        return ResponseEntity.ok()
                .contentType(MediaType.APPLICATION_OCTET_STREAM)
                .header("Content-disposition", "attachment; filename=1.jpg")
                .body(bar);
    }

以上就是小编所写得文件上传,回显图片,以及文件下载,希望能够帮助到大家!!谢谢各位大佬的观看!!文章来源地址https://www.toymoban.com/news/detail-791744.html

到了这里,关于【SpringBoot】简单的文件上传和文件下载以及图片回显的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot+vue文件上传&下载&预览&大文件分片上传&文件上传进度

    SpringBoot+vue 大文件分片下载 Blob File spark-md5根据文件内容生成hash 大文件分片上传(批量并发,手动上传)vue组件封装-form组件 vue上传大文件/视频前后端(java)代码 springboot+vue自定义上传图片及视频 SpringBoot + VUE实现前台上传文件获取实时进度( 使用commons-fileupload设置上传监听

    2024年02月05日
    浏览(60)
  • 微信小程序是如何上传文件以及下载文件

    微信小程序可以使用wx.uploadFile() API来上传文件,使用wx.downloadFile() API来下载文件。 上传文件的步骤如下: 1、创建一个选择文件的按钮。 2、用户点击按钮后,调用wx.chooseImage()方法来选择文件。 3、调用wx.uploadFile()方法上传文件。 示例代码如下: 下载文件的步骤如下: 1、创

    2024年02月11日
    浏览(36)
  • 微信小程序文件上传、下载和图片处理、文件操作API的使用

    这次按照我的理解来做这部分的笔记 首先,复习上节课所学的内容。就是网络请求api的使用  现在我有一个需求就是点击按钮实现获取后端返回的图片  先打开服务器  看一下我们要返回的图片路径  书写结构  看一下返回来的数据。是在data下的banners里。因此我们封装一下

    2024年02月04日
    浏览(32)
  • Java 使用OSS 文件上传+下载 简单入门

    官方SDK文档:Java对象/文件_对象存储-阿里云帮助中心           阿里云对象存储OSS(Object Storage Service)为您提供基于网络的数据存取服务。使用OSS,可以通过网络随时存储和调用包括文本、图片、音视频在内的各类数据文件;可以通过OSS控制台创建Bucket,并将文件上传

    2024年02月10日
    浏览(33)
  • SpringBoot 如何实现文件上传和下载

    当今Web应用程序通常需要支持文件上传和下载功能,Spring Boot提供了简单且易于使用的方式来实现这些功能。在本篇文章中,我们将介绍Spring Boot如何实现文件上传和下载,同时提供相应的代码示例。 Spring Boot提供了Multipart文件上传的支持。Multipart是HTTP协议中的一种方式,用

    2024年02月15日
    浏览(27)
  • 【springboot项目开发】文件上传与下载

    目录 总体介绍 文件上传 介绍 文件上传的前端需求 文件上传的前端代码 文件上传的后端需求 文件上传的后端代码 文件下载 介绍 前端需求 前端代码 后端需求 后端代码 文件的上传和下载功能,是项目开发过程中比较常见的业务需求,我们在客户端被展现的视觉效果通过如

    2024年02月08日
    浏览(31)
  • SpringBoot整合Minio实现文件上传、下载

    SpringBoot整合Minio实现文件上传、下载: 1,介绍高性能分布式存储文件服务Minio:Minio是 基于Go语言编写的对象存储服务 , 适合于存储大容量非结构化的数据 ,例如 图片、音频、视频、日志文件、备份数据和容器/虚拟机镜像等 ,而一个对象文件可以是任意大小,从几kb到最

    2024年02月06日
    浏览(34)
  • SpringBoot+MinIO 实现文件上传、读取、下载、删除

    一、 MinIO 二、 MinIO安装和启动 三、 pom.xml 四、 applicatin.properties(配置文件) 五、 编写Java业务类

    2024年02月09日
    浏览(28)
  • SpringBoot整合Hutool实现文件上传下载

    我相信我们在日常开发中,难免会遇到对各种媒体文件的操作,由于业务需求的不同对文件操作的代码实现也大不相同 maven配置 文件类 文件接口  配置静态资源映射

    2024年02月02日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包