SpringBoot上传文件到本服务器 目录与jar包同级
前言
看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了。
当你使用tomcat发布项目的时候,上传文件存放会变得非常简单,因为你可以随意操作项目路径下的资源。但是当你使用SpringBoot的jar包发布项目的时候,你会发现,你不能像以前一样操作文件了。当你使用File file = new File()的时候根本不知道这个路径怎么办。而且总不能很小的项目也给它构建一个文件服务器吧。所以这次就来解决这样的问题。
不想知道细节的,可以直接跳转到最后封装的部分,里面有相应的实现。
原因
其实原因你也想的到,你无法对jar包里面的资源进行操作,而对于springboot项目来说,你只能读取里面的文件,只能使用InputStream。使用如下方式针对资源文件进行读取:
ClassPathResource classPathResource = new ClassPathResource("static/a.txt");
classPathResource.getInputStream();
其中,这个a.txt存放在resources/static目录下
通过上述方式可以获取a中的内容
实现
因为我们无法操作jar包内容,所以我们只能将文件存放在别的位置,与jar包同级的目录是一个不错的选择。
首先获取根目录
File path = new File(ResourceUtils.getURL("classpath:").getPath());
if(!path.exists()) {
path = new File("");
}
然后获取需要的目录,我们设定我们需要将文件存放在与jar包同级的static的upload目录下
File upload = new File(path.getAbsolutePath(),"static/upload/");
if(!upload.exists()) {
upload.mkdirs();
}
然后当我们要将上传的文件存储的时候,按照下面的方式去新建文件,然后使用你喜欢的方式进行存储就可以了。
File upload = new File(path.getAbsolutePath(),"static/upload/test.jpg");
FileUtils.copyInputStreamToFile(inputStream, uploadFile);
不要忘记
你需要在application.yml配置中加入以下代码,指定两个静态资源的目录,这样你上传的文件就能被外部访问到了。
spring:
# 静态资源路径
resources:
static-locations: classpath:static/,file:static/
这样就能实现上传文件
最后的封装
这个工具类依赖了
compile group: 'commons-fileupload', name: 'commons-fileupload', version: '1.3.1'
compile group: 'commons-io', name: 'commons-io', version: '2.4'
如何你不喜欢完全可以根据自己的喜欢改变
如何使用:
/**
* 测试文件上传
*/
@RequestMapping("/upload")
@ResponseBody
public String upload(MultipartFile file) throws IOException {
return "文件存放路径为" + FileHandleUtil.upload(file.getInputStream(), "image/", file.getOriginalFilename());
}
最后效果

Follow up
这个工具类只是实现了如何上传文件,入参也只有InputStream,后续如何你需要接入参数File或者加入文件名防重复等等,就由你来完成了。
- SpringBoot上传文件到本服务器 目录与jar包同级问题
- springboot上传文件(存入服务器,并将URL存入数据库表中)
- 将打好的jar文件上传到jar包的管理服务器
- Python实现简易文件服务器 包含上传下载删除新建目录功能
- JAVA上传文件图片到指定服务器目录
- 利用Windows Service,定时监控某一目录,发现新文件后自动上传到指定web服务器
- springmvc 文件上传到服务器的固定目录中
- python 实现统计ftp服务器指定目录下文件夹数目、文件数目及所有文件大小 本次主要为满足应用方核对上传到ftp服务器的文件是否缺漏。 主要要求:指定目录下,文件夹数目/文件数目/所有文件大小
- 求助:C/S模式下,如何从客户端将文件上传到domino服务器的某个目录下?(急!急!急!)
- Maven 直接上传jar 文件到服务器。
- 上传的文件放在SVN服务器的哪个目录下
- MyEclipse------如何添加jspsmartupload.jar+文件上传到服务器
- java FTP 文件上传(给出的目录是文件夹,或者文件,都能上传到FTP服务器;如果是文件夹,只用链接一次FTP服务器即可)
- Java实现上传文件图片到指定服务器目录
- C# fckeditor浏览服务器和上传目录不一致,看不到上传过的文件
- 使用root用户登录到AWS EC2服务器,上传文件到/var/www目录
- 上传的文件放在SVN服务器的哪个目录下
- java基于jxl.jar包生成Excel文件到指定目录和服务器下载两种模式的使用方法
- 使用ganymed-ssh2-build.jar来操作linux服务器(上传、下载文件,远程创建目录,远程删除文件等等)
- 利用Cordys插件 上传文件到 Cordys服务器目录