位置: 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)

  • 小米平板5pro怎么进入开发者模式(小米平板5pro怎么样)

    小米平板5pro怎么进入开发者模式(小米平板5pro怎么样)

  • 三星watch4抬手亮屏怎么设置(三星手表抬腕亮屏怎么设置)

    三星watch4抬手亮屏怎么设置(三星手表抬腕亮屏怎么设置)

  • 桌面角标权限是什么意思(桌面图标角标权限)

    桌面角标权限是什么意思(桌面图标角标权限)

  • 快手是字节跳动旗下产品吗(快手字节跳动布局餐饮行业)

    快手是字节跳动旗下产品吗(快手字节跳动布局餐饮行业)

  • 抖音评论区黑色怎么调(抖音评论区黑色背景)

    抖音评论区黑色怎么调(抖音评论区黑色背景)

  • 腾讯王卡免流不支持苹果手机(腾讯王卡免流不包括微信么)

    腾讯王卡免流不支持苹果手机(腾讯王卡免流不包括微信么)

  • 探探活跃时间怎么算的 (探探活跃时间怎么看)

    探探活跃时间怎么算的 (探探活跃时间怎么看)

  • b站个人动态怎么发(b站怎么弄动态)

    b站个人动态怎么发(b站怎么弄动态)

  • 调相机在电力系统中起什么作用(调相机是电动机还是发电机)

    调相机在电力系统中起什么作用(调相机是电动机还是发电机)

  • 电脑上的广告怎么永久删除(电脑上的广告怎么拦截)

    电脑上的广告怎么永久删除(电脑上的广告怎么拦截)

  • oppor15有深色模式吗(oppor15深色模式怎么设置)

    oppor15有深色模式吗(oppor15深色模式怎么设置)

  • 强行换行用什么键(强行换行什么意思)

    强行换行用什么键(强行换行什么意思)

  • 快手上每日打卡是什么(快手上每日打卡能间断吗)

    快手上每日打卡是什么(快手上每日打卡能间断吗)

  • 毒上免费鉴别要多久(毒上鉴别一次多少钱)

    毒上免费鉴别要多久(毒上鉴别一次多少钱)

  • 小米路由器3g是千兆吗(小米路由器3G是千兆端口还是百兆端口)

    小米路由器3g是千兆吗(小米路由器3G是千兆端口还是百兆端口)

  • 苹果11打字反应迟钝(苹果11打字反应慢,打字快一点还会出现漏字)

    苹果11打字反应迟钝(苹果11打字反应慢,打字快一点还会出现漏字)

  • 怎么把手机电话本导出(怎么把手机电话号码复制到卡上)

    怎么把手机电话本导出(怎么把手机电话号码复制到卡上)

  • 苹果5sa1533是什么版本(苹果5a1533是什么版本)

    苹果5sa1533是什么版本(苹果5a1533是什么版本)

  • vivox21屏幕闪烁怎么办(vivox21手机屏幕一闪一闪的是怎么回事)

    vivox21屏幕闪烁怎么办(vivox21手机屏幕一闪一闪的是怎么回事)

  • word文档包括什么(word文档类型有哪些)

    word文档包括什么(word文档类型有哪些)

  • vue视频可以加字幕吗(vue怎么在视频里加图片)

    vue视频可以加字幕吗(vue怎么在视频里加图片)

  • mate30pro音量键怎么调(mate30pro音量键怎么打开)

    mate30pro音量键怎么调(mate30pro音量键怎么打开)

  • 显示适配器有感叹号(显示适配器有感叹号是什么问题)

    显示适配器有感叹号(显示适配器有感叹号是什么问题)

  • 小米手环4和nfc版有什么区别(小米手环4和nfc版外观对比)

    小米手环4和nfc版有什么区别(小米手环4和nfc版外观对比)

  • 全民k歌图片怎么制作(全民k歌图片怎么删除掉)

    全民k歌图片怎么制作(全民k歌图片怎么删除掉)

  • 系统备份的文件在哪里(系统备份的文件能移动吗)

    系统备份的文件在哪里(系统备份的文件能移动吗)

  • 华为p30是无线充电吗(华为p30是否无线充电)

    华为p30是无线充电吗(华为p30是否无线充电)

  • 计提坏账为什么是递延所得税资产
  • 冲回多计提费用
  • 小规模纳税人企业所得税计算
  • 已认证的专票可以取消认证吗
  • 个体工商户税种认定
  • 长期待摊费用摊销会计分录
  • 小规模开票软件怎么下载
  • 技术推广服务包含什么 奇瑞汽车
  • 企业辅助生产车间
  • 有限合伙企业合伙人责任
  • 票据结算的分录怎么做
  • 试驾车抵税
  • 事业单位库存物品
  • 12月份费用可以计提吗
  • 不涉及税收
  • 960011115金税盘错误
  • 会计案例分析题万能模板
  • 用于研发的材料进项能否加计抵扣1%
  • 专用发票的清单要开2张吗
  • 预算会计的基本等式为
  • 股东折价入股会计分录
  • 宿舍管理制度规定心得体会范文
  • 个人营业执照如何办理社保
  • 收到美金货款
  • 退休职员工伤补助金放哪个科目?
  • 一式三联的收据哪一联要盖财务章
  • dwg文件怎么打开
  • 支付宝国际驾照有效期是多久
  • 固定资产残值率计算公式
  • 宏基aspire v5-573g怎样加运行内存
  • mac系统自带软件有哪些
  • 期间损益结转都结转什么
  • 应付职工薪酬包括个人社保和个税吗
  • 年终双薪是底薪吗
  • 债券利息计算方法
  • 溢缴退费是什么意思
  • php实现文件的下载
  • php的序列化操作生成的哪种格式
  • 退车船税分录
  • 其它收益和递延收益
  • vue使用计算属性
  • 承兑贴现会计分录怎么做
  • mask rcnn优点
  • yii2框架从入门到精通
  • python怎么生成随机矩阵
  • 利润表中本期数
  • 红冲暂估是什么意思
  • 发票认证系统叫什么名字
  • 个人社保交错了怎么办
  • 小规模纳税人增值税专用发票税率
  • 小规模纳税人免税怎么做账
  • 公司充话费
  • 开发票,对方收取税点,如何计算?
  • 固定资产原价和账面价值的区别
  • 今年发的去年的工资怎么扣税
  • 递延收益按多少折算
  • 房产税开征利好那些概念股 新闻
  • 公司的固定资产怎么处理
  • 会计做账手工帐
  • 年初建账考虑要点
  • 怎样提升win10开机速度
  • 电脑bios怎么设置usb启动
  • win8.1系统更新后启动不了
  • 苹果mac使用
  • 如何解决win10系统开机一直转圈圈的问题
  • rhel6.5安装
  • win10商店没有图标
  • perl 删除文件
  • python selenium原理
  • pycharm怎么学
  • js特殊字符有哪些
  • javascript要怎么学
  • bootstrap 按钮
  • javascript canvas方法有哪些
  • jquery 修改
  • jquery怎么修改样式
  • android 字体设置
  • js实现类
  • 个人绩效考核税务局
  • 煤炭资源税税率选煤税率多少黑龙江
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设