文件上传模块:

首先,需要设置一个存放上传文件的目录,可以在接口中指定,也可以在配置文件中提前设置好。

这边采用的是配置文件的形式,在application.properties中指定路径为static下的files文件夹

#存放上传文件的目录
fileLocation=static/files#请求下载文件的源目录
fileDownload=static/downLoad

然后,通过@Value注解的方式拿到该目录的值,注入到自定义的变量中

    @Value("${fileLocation}")private String fileLocate;@Value("${fileDownload}")private String FileDownLoad;

其次,通过拼接的方式获取该目录的绝对路径,将此路径转换为抽象路径名来创建一个File实例(这里的file并非是真实的文件,下图为官方的解释)。

然后,判断该路径是否存在,若不存在则需要生成该目录

最后,将前端传来的文件保存在该目录下,整个上传功能到此就结束了。

上传模块的完整代码如下(不要忘记存放目录路径的配置):

 @PostMapping("/upload")public void FileUpload(MultipartFile file, HttpServletRequest request) throws IOException{//获取存放上传文件的绝对路径String realPath = ResourceUtils.getURL("classpath:").getPath()+fileLocate;//创建一个file对象File newFile = new File(realPath);//测试此路径是否存在,若不存放则生成该路径if(!newFile.exists())newFile.mkdirs();//在指定目录下生成该文件file.transferTo(new File(newFile,file.getOriginalFilename()));}

成功上传的图片会出现在target.classes.static.files目录下,如下图(target目录需要编译后才会生成)

另外,在application.properties文件里也可以对上传文件的大小进行配置,如下文件上传模块

#设置总共上传的文件大小
spring.servlet.multipart.max-request-size=10MB#设置单个上传文件的大小
spring.servlet.multipart.max-file-size=5MB

文件下载模块:

首先,需要有一个存放下载文件的目录,在static下新建一个download目录,放入要测试的文件

然后,设置响应头,告诉前端要以附件的形式打开该文件

其次,获取文件的输入流,创建文件的输出流对象,通过缓冲区的方式从输入流中读入数据,再写到输出流中,知道缓冲区不再有数据。

最后,先关闭输出流,再关闭输入流。

注意:当请求下载的文件是中文名称时,需要对文件名的编码转为utf-8格式,不然后端接受的文件名是乱码,导致无法成功下载。

下载模块的完整代码如下(下载文件路径的配置如上):

@GetMapping("/download/{fileName}")public void FileDownload(@PathVariable String fileName, HttpServletResponse response) throws IOException{//获得待下载文件的绝对路径String realPath = ResourceUtils.getURL("classpath:").getPath()+FileDownLoad;//获取文件输入流FileInputStream fileInputStream = new FileInputStream(new File(realPath,fileName));//设置响应头、以附件形式打开文件//response.setHeader("content-disposition","attachment;filename="+fileName);//文件名包含中文时需要进行中文编码,否则会出现乱码问题response.setHeader("content-disposition","attachment;filename="+ URLEncoder.encode(fileName,"utf-8"));ServletOutputStream servletOutputStream = response.getOutputStream();int len = 0;//设置一个缓冲区,大小取决于文件内容的大小byte[] buffer = new byte[1024];//每次读入缓冲区的数据,直到缓冲区无数据while((len=fileInputStream.read(buffer))!=-1){//输出缓冲区的数据servletOutputStream.write(buffer,0,len);}servletOutputStream.close();fileInputStream.close();}

SpringBoot实现文件上传下载功能详解(附带中文名称显示乱码问题的解决)相关推荐

  1. maven 项目 springMVC实现文件图片的上传下载功能详解(源码已提供,小白必看)

    文件上传是项目开发中最常见的功能之一 ,springMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下其不能处理文件上传工作. ...

  2. 项目_功能模块_基于Spring Boot的文件上传下载功能的设计与实现

    文章目录 基于Spring Boot的文件上传下载功能模块的设计与实现 1.前言 2.技术栈 3.关键源码 4.实现效果 4.1.登录 4.2.文件列表 4.3.上传文件测试 4.3.1.测试图片 4 ...

  3. java文件流 m.jb51.net_FasfDFS整合Java实现文件上传下载功能实例详解

    今天使用Java代码实现文件的上传和下载.对此作者提供了Java API支持,下载fastdfs-client-java将源码添加到项目中.或者在Maven项目pom.xml文件中添加依赖 org.c ...

  4. 教你如何实现c#文件上传下载功能

    简单介绍一下c#文件上传下载功能实现. NuGet 安装SqlSugar Model文件下新建 DbContext 类 public class DbContext {public DbContext ...

  5. JavaWeb实现文件上传下载功能实例解析

    转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...

  6. fileinput 时间_JavaScript_Bootstrap Fileinput文件上传组件用法详解,最近时间空余,总结了一些关...

    最近时间空余,总结了一些关于bootstrap fileinput组件的一些常见用法,特此分享到phpstudy平台,供大家参考,同时也方便以后的查找.本文写的不好还请见谅. 一.效果展示 1.原始的 ...

  7. fileupload的回调方法_jQuery File Upload文件上传插件使用详解

    本篇教程介绍了jQuery File Upload文件上传插件使用详解,希望阅读本篇文章以后大家有所收获,帮助大家对jQuery的理解更加深入. < jQuery File Upload 是一个 ...

  8. SpringBoot图文教程4—SpringBoot 实现文件上传下载(亲测)

    SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+案例 思维导图」「基础篇上」 SpringBoot图文教程2-日志的使用「logback」「log4j」 Spring ...

  9. springboot改文件头_SpringBoot图文教程4—SpringBoot 实现文件上传下载

    有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...

最新文章

  1. Asp.net中动态在中加入Scrpit标签
  2. IOC操作Bean管理XML方式(注入集合类型属性)
  3. InvalidCharacterError: Failed to execute 'setAttribute' on 'Element': ')' is not a valid
  4. oracle中值集限定词为灰色,《Oracle从入门到精通》读书笔记第四章 SQL语言基础之一...
  5. SpringSecurity-1-AuthenticationFailureHandler接口(登录失败之后的处理逻辑)
  6. [转]sqlserver 创建分区表
  7. 自适应鲁棒控制(ARC)实例推导(手写超详细)
  8. 虚拟机Linux服务器网络设置
  9. linux 命令获取屏幕亮度值,设置屏幕亮度
  10. 靶机渗透练习55-digitalworld.local:MERCY v2
  11. zblog asp 升级到PHP,Zblog之php版本 千呼万唤始出来
  12. 前端vue点击切换(黑夜/白天模式)主题最新(源码)
  13. 中秋节到了我给大家用python做一个月饼
  14. tp5.0 think-queue 消息队列
  15. Linux系统编程笔记(李慧琴) 2
  16. Pandas 数据分析-第八章(排序sort_index())
  17. windows电脑无线投屏到小米电视
  18. 如何把PDF文件转换成HTML文件
  19. vs2019 android,VS2019无法安装Android SDK 28的问题
  20. Linux虚拟机ens33无法连接问题

热门文章

  1. Samp免流软件以及地铁跑酷的自校验分析
  2. Win7 删除wifi热点
  3. 不做XR业务,腾讯如何做元宇宙?
  4. 用java输出正方形,等腰三角形,直角三角形
  5. h3c服务器cas安装虚拟机,H3C CAS云平台虚拟机的创建注意事项
  6. springboot 有趣的banner
  7. C# WinForm显示GIF动态图片
  8. Flowplayer播放器flash全屏播放器带播放按钮
  9. 对powershell的一次免杀
  10. 计算机窗口标题栏控制菜单图标,职称计算机考试资料(八)