SpringBoot上传文件到本服务器 目录与jar包同级问题

目录java

 

前言

看标题好像很简单的样子,可是针对使用jar包发布SpringBoot项目就不同了。
当你使用tomcat发布项目的时候,上传文件存放会变得很是简单,由于你能够随意操做项目路径下的资源。可是当你使用SpringBoot的jar包发布项目的时候,你会发现,你不能像之前同样操做文件了。当你使用File file = new File()的时候根本不知道这个路径怎么办。并且总不能很小的项目也给它构建一个文件服务器吧。因此此次就来解决这样的问题。
不想知道细节的,能够直接跳转到最后封装的部分,里面有相应的实现。

git

 

缘由

其实缘由你也想的到,你没法对jar包里面的资源进行操做,而对于springboot项目来讲,你只能读取里面的文件,只能使用InputStream。使用以下方式针对资源文件进行读取:github

?
1
2
ClassPathResource classPathResource = new ClassPathResource( "static/a.txt" );
classPathResource.getInputStream();

其中,这个a.txt存放在resources/static目录下spring

经过上述方式能够获取a中的内容tomcat

 

实现

由于咱们没法操做jar包内容,因此咱们只能将文件存放在别的位置,与jar包同级的目录是一个不错的选择。springboot

首先获取根目录服务器

?
1
2
3
4
File path = new File(ResourceUtils.getURL( "classpath:" ).getPath());
if (!path.exists()) {
path = new File( "" );
}

而后获取须要的目录,咱们设定咱们须要将文件存放在与jar包同级的static的upload目录下app

?
1
2
3
4
File upload = new File(path.getAbsolutePath(), "static/upload/" );
if (!upload.exists()) {
upload.mkdirs();
}

而后当咱们要将上传的文件存储的时候,按照下面的方式去新建文件,而后使用你喜欢的方式进行存储就能够了。工具

?
1
2
File upload = new File(path.getAbsolutePath(), "static/upload/test.jpg" );
FileUtils.copyInputStreamToFile(inputStream, uploadFile);
 

不要忘记

你须要在application.yml配置中加入如下代码,指定两个静态资源的目录,这样你上传的文件就能被外部访问到了。测试

?
1
2
3
4
spring:
# 静态资源路径
resources:
static -locations: classpath: static /,file: static /

这样就能实现上传文件

 

最后的封装

工具类:

https://github.com/LinkinStars/springBootTemplate/blob/master/src/main/java/com/linkinstars/springBootTemplate/util/FileHandleUtil.java

这个工具类依赖了

?
1
2
compile group: 'commons-fileupload' , name: 'commons-fileupload' , version: '1.3.1'
compile group: 'commons-io' , name: 'commons-io' , version: '2.4'

如何你不喜欢彻底能够根据本身的喜欢改变

如何使用:

?
1
2
3
4
5
6
7
8
/**
* 测试文件上传
*/
@RequestMapping ( "/upload" )
@ResponseBody
public String upload(MultipartFile file) throws IOException {
return "文件存放路径为" + FileHandleUtil.upload(file.getInputStream(), "image/" , file.getOriginalFilename());
}

最后效果



 

Follow up

这个工具类只是实现了如何上传文件,入参也只有InputStream,后续如何你须要接入参数File或者加入文件名防重复等等,就由你来完成了。

总结

以上所述是小编给你们介绍的SpringBoot上传文件到本服务器 目录与jar包同级问题,但愿对你们有所帮助,若是你们有任何疑问欢迎给我留言,小编会及时回复你们的!

相关文章
相关标签/搜索