位置: IT常识 - 正文

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

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

推荐整理分享【SpringBoot】简单的文件上传和文件下载以及图片回显(springbootssm),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:springbootssm,springboot最全的讲解,springboot 简书,springboot最全的讲解,springboot详细教程,springboot 简书,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项目是什么版本的,如果你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>

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

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

在项目中的 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>

如图:

 

第三步:创建控制器

将方法写在文件上传的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.jiuchutong.com/zhishi/290766.html 转载请保留说明!

上一篇:穆尔森林国家纪念碑,加利福尼亚州旧金山 (© Mia2you/Shutterstock)(穆尔官网)

下一篇:Javan tree frogs sitting together on a stalk in Indonesia (© SnapRapid/Offset by Shutterstock)

  • 手机正面朝下摔没事吧(手机正面朝下摔了黑屏但是屏幕有反应)

    手机正面朝下摔没事吧(手机正面朝下摔了黑屏但是屏幕有反应)

  • 怎么删除设置里的铃声(怎么删除设置里的墙纸)

    怎么删除设置里的铃声(怎么删除设置里的墙纸)

  • 黄金vip会员怎么取消自动续费(黄金vip会员怎么领取)

    黄金vip会员怎么取消自动续费(黄金vip会员怎么领取)

  • 快手无响应该怎么解决(快手总是无响应怎么办?)

    快手无响应该怎么解决(快手总是无响应怎么办?)

  • 开hd有什么坏处吗(开启hd有什么坏处)

    开hd有什么坏处吗(开启hd有什么坏处)

  • 打印机不吸纸怎么处理(打印机不吸纸怎么解决视频)

    打印机不吸纸怎么处理(打印机不吸纸怎么解决视频)

  • 电脑显示文件损坏无法启动(电脑显示文件损坏然后蓝屏怎么处理)

    电脑显示文件损坏无法启动(电脑显示文件损坏然后蓝屏怎么处理)

  • 苹果6设置里有投屏功能吗(苹果设置里有的软件不显示)

    苹果6设置里有投屏功能吗(苹果设置里有的软件不显示)

  • 苹果4版本过低怎么办(苹果4版本过低微信装不了怎么办)

    苹果4版本过低怎么办(苹果4版本过低微信装不了怎么办)

  • beatssolo3安卓能用吗(beatssolo3可以连接安卓手机吗)

    beatssolo3安卓能用吗(beatssolo3可以连接安卓手机吗)

  • 微信怎么设置收藏悬浮(微信怎么设置收款时间延长)

    微信怎么设置收藏悬浮(微信怎么设置收款时间延长)

  • 喜马拉雅听书怎么听不了了(喜马拉雅听书怎么取消自动续费)

    喜马拉雅听书怎么听不了了(喜马拉雅听书怎么取消自动续费)

  • vsco怎么算订阅成功(vsco订阅不了)

    vsco怎么算订阅成功(vsco订阅不了)

  • 电脑兼容性在哪里调整(电脑兼容性在哪里找到)

    电脑兼容性在哪里调整(电脑兼容性在哪里找到)

  • 拼多多怎么取消震动(拼多多怎么取消银行卡绑定)

    拼多多怎么取消震动(拼多多怎么取消银行卡绑定)

  • 快手今日评论上限了啥意思(今天快手评论都怎么了)

    快手今日评论上限了啥意思(今天快手评论都怎么了)

  • 怎么使用思维导图(怎么使用思维导图模板)

    怎么使用思维导图(怎么使用思维导图模板)

  • 微信笔记在哪里(华为手机微信笔记在哪里)

    微信笔记在哪里(华为手机微信笔记在哪里)

  • 抖音拉黑对方有提示吗(抖音拉黑对方有什么用)

    抖音拉黑对方有提示吗(抖音拉黑对方有什么用)

  • 确认收货前后退款区别(确认收货前退款与收货后退款区别)

    确认收货前后退款区别(确认收货前退款与收货后退款区别)

  • soul怎样知道别人在线(soul怎么知道对方在和别人聊天)

    soul怎样知道别人在线(soul怎么知道对方在和别人聊天)

  • 手机投屏没有声音怎么办(手机投屏有声音没画面是什么情况)

    手机投屏没有声音怎么办(手机投屏有声音没画面是什么情况)

  • 千兆网口和百兆网口的区别(千兆网口和百兆网口怎么区分)

    千兆网口和百兆网口的区别(千兆网口和百兆网口怎么区分)

  • Windows 10如何清理DNS缓存(windows10如何清理磁盘碎片)

    Windows 10如何清理DNS缓存(windows10如何清理磁盘碎片)

  • 甲供材料的增值税是多少
  • 烟叶税税率是多少2019
  • 小规模纳税人免税怎么做账
  • 增值税季报是填3个月的收入吗
  • 工业企业库存商品的初始入账成本
  • 存货取得的分录
  • 关税滞纳金会计怎么做账
  • 自建的固定资产入账价值具体包括哪些
  • 房地产开发企业销售自行开发的房地产项目
  • 加工成本属于什么会计科目
  • 增值税和消费税的区别和联系
  • 过渡费交税吗
  • 向职工出售住房
  • 高新技术企业的行业
  • 会计分录如何试算出来的
  • 装修的增值税
  • 制造费用主要包括哪些内容
  • 升级打装备的手游
  • 如何激活windows11专业版?
  • 专家评审费如何报账
  • 筹建期间内发生的开办费属于什么费用
  • win7电脑怎么样
  • 修改插入点闪烁光标的宽度
  • 收到融资款如何做账
  • 微软window
  • 商业成本结转会计分录
  • 明细分类帐户
  • php的运算符主要包括哪些?
  • transit code
  • 圣保罗大教堂是什么教
  • php操作文件的常用函数
  • 生产企业可以抵扣进项税的
  • 微信小程序反编译2023
  • 企业所得税按季还是按年
  • php使用while循环计算1到100的和
  • 微信php源码
  • 运输费怎么做会计分录
  • 累计预扣法的适用条件
  • 使用筷子就餐会不会传染乙肝病毒
  • 没有综合所得的经营所得如何预扣预缴个税
  • 企业管理咨询合作协议
  • 财政拨款结转和非财政拨款结转区别
  • python动态参数应用
  • 农村合作社不报税会导致经营异常吗
  • 个体户跨季领取发票流程
  • 外购的商品用于生产经营
  • 差旅费补助无发票的文件依据
  • 低值易耗品费用计入产品成本的方式有哪几种
  • 坏账准备?
  • 未税金额怎么算税费
  • 什么叫公关费用
  • 装修费用会计科目
  • 工程违约金账务处理规定
  • 微信收款如何做账报税
  • 企业不如实申报个税的风险
  • 购入投资性房地产支付的相关税费
  • 以前年度长期股权投资漏记调整
  • 记账凭证应交税费填写样本图片
  • 小规模应收利息怎么算
  • 市政配套费交给哪个部门
  • 原股东决定
  • 营改增挂靠工程项目的账务如何处理?
  • 记账凭证的审核与编制可以是一个人吗
  • SQL 统计一个数据库中所有表记录的数量
  • mysql 授权命令
  • mysql服务1067进程意外终止
  • sqlserver存储过程怎么查看
  • ubuntu怎么装
  • win7安装windows无法安装所需的文件请确保
  • Linux桌面环境安装
  • winxp开启远程控制
  • window10系统连接wifi
  • 麒麟系统命令
  • linux查看内存型号与数量
  • 玩端游的平台
  • FileUtils文件工具类
  • 基层税务所工作现状
  • 银行人员司法查询给查错了,怎么办
  • 江西省电子税务局官网app
  • 海关税目表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设