SpringBoot实现文件上传下载功能详解(附带中文名称显示乱码问题的解决)
文件上传模块:
首先,需要设置一个存放上传文件的目录,可以在接口中指定,也可以在配置文件中提前设置好。
这边采用的是配置文件的形式,在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实现文件上传下载功能详解(附带中文名称显示乱码问题的解决)相关推荐
- maven 项目 springMVC实现文件图片的上传下载功能详解(源码已提供,小白必看)
文件上传是项目开发中最常见的功能之一 ,springMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下其不能处理文件上传工作. ...
- 项目_功能模块_基于Spring Boot的文件上传下载功能的设计与实现
文章目录 基于Spring Boot的文件上传下载功能模块的设计与实现 1.前言 2.技术栈 3.关键源码 4.实现效果 4.1.登录 4.2.文件列表 4.3.上传文件测试 4.3.1.测试图片 4 ...
- java文件流 m.jb51.net_FasfDFS整合Java实现文件上传下载功能实例详解
今天使用Java代码实现文件的上传和下载.对此作者提供了Java API支持,下载fastdfs-client-java将源码添加到项目中.或者在Maven项目pom.xml文件中添加依赖 org.c ...
- 教你如何实现c#文件上传下载功能
简单介绍一下c#文件上传下载功能实现. NuGet 安装SqlSugar Model文件下新建 DbContext 类 public class DbContext {public DbContext ...
- JavaWeb实现文件上传下载功能实例解析
转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...
- fileinput 时间_JavaScript_Bootstrap Fileinput文件上传组件用法详解,最近时间空余,总结了一些关...
最近时间空余,总结了一些关于bootstrap fileinput组件的一些常见用法,特此分享到phpstudy平台,供大家参考,同时也方便以后的查找.本文写的不好还请见谅. 一.效果展示 1.原始的 ...
- fileupload的回调方法_jQuery File Upload文件上传插件使用详解
本篇教程介绍了jQuery File Upload文件上传插件使用详解,希望阅读本篇文章以后大家有所收获,帮助大家对jQuery的理解更加深入. < jQuery File Upload 是一个 ...
- SpringBoot图文教程4—SpringBoot 实现文件上传下载(亲测)
SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+案例 思维导图」「基础篇上」 SpringBoot图文教程2-日志的使用「logback」「log4j」 Spring ...
- springboot改文件头_SpringBoot图文教程4—SpringBoot 实现文件上传下载
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...
最新文章
- Asp.net中动态在中加入Scrpit标签
- IOC操作Bean管理XML方式(注入集合类型属性)
- InvalidCharacterError: Failed to execute 'setAttribute' on 'Element': ')' is not a valid
- oracle中值集限定词为灰色,《Oracle从入门到精通》读书笔记第四章 SQL语言基础之一...
- SpringSecurity-1-AuthenticationFailureHandler接口(登录失败之后的处理逻辑)
- [转]sqlserver 创建分区表
- 自适应鲁棒控制(ARC)实例推导(手写超详细)
- 虚拟机Linux服务器网络设置
- linux 命令获取屏幕亮度值,设置屏幕亮度
- 靶机渗透练习55-digitalworld.local:MERCY v2
- zblog asp 升级到PHP,Zblog之php版本 千呼万唤始出来
- 前端vue点击切换(黑夜/白天模式)主题最新(源码)
- 中秋节到了我给大家用python做一个月饼
- tp5.0 think-queue 消息队列
- Linux系统编程笔记(李慧琴) 2
- Pandas 数据分析-第八章(排序sort_index())
- windows电脑无线投屏到小米电视
- 如何把PDF文件转换成HTML文件
- vs2019 android,VS2019无法安装Android SDK 28的问题
- Linux虚拟机ens33无法连接问题