大体思路
1、文件上传
文件上传保存到本地,我们要关注的是文件怎样接收,怎样保存,保存在哪?
首先,既然是文件,就要有对应的文件保存地址,或者说文件保存路径和文件保存目录都可以,如下面这个代码,我们定义一个字符串用来表示文件保存地址。
System.getProperty("user.dir") 表示当前后端项目的路径,是固定的写法。它会自动识别当前项目所在的根路径,每个人的可能都不一样
File.separator 表示分隔符,也就是斜杠 /
files表示之后所有的文件都存储在 files 文件包下
比如此处我的 ROOT_PATH(文件路径) 是 D:code_githubDream_javajava_chatroomfiles
首先,此处每个人的路径肯定都不相同,不要疑问为什么和我的不一样,因为咱项目所在位置就不一样
其次,你也可以指定其它的路径,这都是开放性的选择
我们写一个接口,路径随意,比如我这里的 /uploadceshi
然后呢,我们写对应的方法,方法要有参数,既然是文件,我们就使用 MultipartFile 类型来进行接收,后续也可以使用它的很多内置函数来进行文件的处理
然后,这样一个基础的接口就写好了,而且已经能接收前端传来的文件了,当前端上传文件后,文件就保存成了我们的 file 参数,接下来就可以对文件进行处理了。
首先,我们要获取文件的原始名称来进行存储,并取得文件的主名称和后缀以供后续使用
log.info 是日志打印的代码,类似于 System.out.println() ,如果 log.info 看不懂的话换成 System.out.println() 也是可以的
还记得我们开始定义的保存文件的父级目录么,也就是 ROOT_PATH,现在我们要保存文件了,既然要保存,我们需要判断这个父级目录是否存在,如果不存在,我们要先创建这个 “父级目录”
注意 FileUtil 不要导错包了,此处我使用的是 hutool 的
如果不知道 hutool 是啥,在maven仓库里搜下对应的依赖,导入到 pom.xml 里就可以了
hutool 是个知名的工具包,类似于 lombok
未成功先言败,我们继续判断特殊情况,比如当前上传的文件已经存在了,那么这个时候我就要重命名一个文件
特殊情况都处理完了,我们进行文件的存储
最后,我们返回给前端一个URL,也就是后续我们的下载接口地址
ip和port换成你对应的ip和端口号即可,拼接成字符串,比如我这里返回的url:
完整上传接口代码如下:
ip、port 以及 ROOT_PATH 是我在类中,这个方法外定义的变量,所以没在下面这段代码里
java文件传输基础2、文件下载
这个接口代码量少,逻辑清晰,我直接将代码全部放在下面,然后一下子讲述完
这个接口的访问地址就是上传接口返回的url
下载接口有两个参数,fileName接收想要下载的文件名
response.addHeader 等会再讲,先简单讲述下作用,使用第一个 response.addHeader 时,访问url文件直接下载,无法预览,使用第二个 response.addHeader 时,访问url文件如果可以预览,则先预览,不可以,会进行下载
先取得完整的文件路径名,如果路径不存在,直接返回空,存在则以字节流数组的方式返回前端
有人可能会疑问,这里我写的返回类型不是 void 么?怎么还可以返回数据给前端呢。这个简单理解为特殊情况吧,而且文件IO本就相对于文本数据的操作有极大的不同
特殊讲解 —— 必看
1、文件预览/下载
注意这两行代码
- 使用第一行代码就是文件下载
- 使用第二行代码就是文件预览,若无法预览则下载(像图片、PDF可以预览,应用软件包等无法1预览)
很多东西可能有疑问?为什么?
那么此处就要讲一下响应中的一个属性了,Content-Disposition,当这个属性默认是inline
- 当它是 inline 时,浏览器会进行下载操作
- 当它是 attachment 时,浏览器会进行下载操作
至于详细的就要剖析HTTP或HTTPS的请求和响应格式了,感兴趣的朋友可以自己去了解
2、文件上传/下载大小限制
代码运行失败解决方法
1、包一定不要引错!!!比如 lombok 和 hutool
2、ip和端口号换成自己的,或者像我一样在yml里自己定义
3、文件可以预览或者下载,请详细阅读此篇博客目录中的 “特殊讲解 —— 必看”
4、文件过大无法上传或下载,请详细阅读此篇博客目录中的 “特殊讲解 —— 必看”
完整代码
注:hutool、lombok等自行导入,在maven仓库搜依赖即可(方式很多)
ip、port是我在yml里定义的,你直接换成你自己的ip和端口号即可(一定要换)
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/18714.html