介绍

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

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

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

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


目录

前言

一、文件上传与下载

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>

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

在项目中的 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.Driverdatasource.url= localhost:3306/testdbspring.datasource.url= jdbc:mysql://${datasource.url}? useSSL=false&useUnicode=true&characterEncoding=utf- 8&allowMultiQueries=true&autoReconnect=true&maxReconnects=10&serverTimezone=UTCspring.datasource.username= rootspring.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;@Controllerpublic 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;@Configurationpublic class UploadConfig implements WebMvcConfigurer {// 上传地址@Value("${file.upload.path}")private String filePath;// 显示相对地址@Value("${file.upload.path.relative}")private String fileRelativePath;//地址映射 url地址与本地磁盘地址映射@Overridepublic 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);}

以上就是小编所写得文件上传,回显图片,以及文件下载,希望能够帮助到大家!!谢谢各位大佬的观看!!

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

  1. antd 图片上传遇到的坑----图片回显(Upload)

    antd 图片上传遇到的坑----图片回显(Upload) 最近又被安排了一个前端的项目,遇到了一个图片上传的问题,用的是antd的Upload组件,在这遇到的问题和大家分享一下,下网可以帮到需要的人 ...

  2. Java使用SpringBoot实现简单的文件上传(上传文件到本地)

    实现代码: (此处代码写在了Controller层 建议写在Service层,Controller只做调用) /*使用SpringBoot实现简单文件上传(上传至本地)*/@RequestMappin ...

  3. struts2的文件上传和文件下载

    实现使用Struts2文件上传和文件下载: 注意点: (1)对应表单的file1和私有成员变量的名称必须一致 <input type="file" name="fi ...

  4. 项目Tips---使用阿里的OOS实现简单的文件上传

    简介 在还没有工作时,我们做项目时一般使用的Tomcat服务器作为文件上传和下载的存储点.可是作为上线项目这是行不通,所以为了解决海量数据存储与弹性扩容,阿里云给我们提供了一个OOS的对象存储平台. ...

  5. 基于OkHttp 、Retrofit 、Volley 、RxJava、Novate多种网络框架整合的快速项目开发框架,一行代码实现Ftp文件上传、文件下载、文件删除和进度监听的工具类的使用

    基于OkHttp .Retrofit .Volley .RxJava.Novate多种网络框架整合的快速项目开发框架,Ftp文件上传.文件下载的工具类的使用. 依赖于Ftp的jar包,对上传.下载.删 ...

  6. 简述php中文件上传过程,简单php文件上传详细说明

    关于文件上传我们讲了很多,这只是一款最基本的简单的文件上传功能,同时本教程也介绍了关于上传的原理以及各种函数的使用与file的参数说明,以及php.ihi设置上传文件大小配置等. 1  如果实现小文件 ...

  7. 使用jspsmartupload完成简单的文件上传系统

    请不要妄想,一个html的file控件,再加上JavaScript与jQuery语句就可以完成文件上传, 文件上传系统从来是需要配合服务器来完成的 用户把自己的文件上传到服务器上 文件上传系统是很复杂 ...

  8. 利用Socketserver实现简单的文件上传

    利用Socketserver实现简单的文件上传 server.py #!/usr/bin/env python #coding:utf-8 import SocketServer import os ...

  9. 树莓派3B+采用花生棒进行内网穿透,从拆箱到实现SSH远程控制与sftp简单远程文件上传下载

    树莓派3B+采用花生棒进行内网穿透,使用sftp实现远程控制与简单远程文件上传下载) 准备步骤 物理环境搭建 关于基础配置的博文推荐 树莓派联网配置 基础联网 配置静态ip 花生壳内网穿透 常用远程端 ...

最新文章

  1. Spring 的 BeanUtils 踩坑记,你是不是遇到过这些问题?
  2. 高二女生制作危险驾驶报警手机软件
  3. yaml文件解析:c++篇
  4. [转] PHP之加解密: Mcrypt函数
  5. Aptana 开发环境执行时默认的工作路径
  6. Webform(简单控件、复合控件)
  7. [剑指offer] 7. 斐波那契数列 (递归 时间复杂度)
  8. android 多线程互斥,Android同步类:Mutex和Condition
  9. idea中的.iml和.idea能删除么——可以
  10. Z-Stack + OSAL操作系统
  11. 东华OJ进阶题47 最少拦截系统
  12. 斯坦福CS234增强学习——(1)简介
  13. [转]常用CASE工具介绍
  14. Ladydug5球形全景影像(获取、拼接)
  15. Java源代码和字节代码操作
  16. NB-IoT下的消防栓压力监测解决方案
  17. Java-可重入锁(ReentrantLock)
  18. AI笔记: 数学基础之概率与统计
  19. DHCP概述及详细的DHCP服务器部署
  20. 解决TextMate中文问题

热门文章

  1. memory runs at single channel问题解决
  2. 如何在安卓手机上录制qq通话声音
  3. 长线暴利大师斯坦利 · 克罗的投资真谛
  4. 【杂谈】从墨天轮及CSDN关于问答板块现状中对国产数据库进行的一些思考
  5. 国外android几年不卡,除了iPhone,这4部手机也可以三年不卡,买到准不亏
  6. java rpm卸载_怎样使用rpm命令一次性删除依赖的软件包
  7. 保姆级教程:在Linux上安装配置Resilio Sync
  8. 如何下载迅雷(狗狗)屏蔽的资源?
  9. Android学习:常用控件
  10. python not defined怎么解决_数据量太大?散点图装不下怎么办?用Python解决数据密度过大难题