博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot上传文件到本服务器 目录与jar包同级
阅读量:5985 次
发布时间:2019-06-20

本文共 1683 字,大约阅读时间需要 5 分钟。

前言

看标题好像很简单的样子,但是针对使用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或者加入文件名防重复等等,就由你来完成了。

 

转载地址:http://xwylx.baihongyu.com/

你可能感兴趣的文章
.net 事件传递
查看>>
require和include区别
查看>>
新安装系统安装QQ不能使用
查看>>
react-navigation 导航栏使用
查看>>
vanish(squid) + HAProxy + nginx + memcached(redis)
查看>>
/etc/inittab文件详解
查看>>
一个较完整的SpringMVC工程的配置
查看>>
JavaScript实现前端路由
查看>>
各大搜索引擎网站登录入口
查看>>
maven 搭建
查看>>
极速开发,快就是这么任性,你不知道的Jfinal2.0新特性
查看>>
Linux Notes
查看>>
iSCSI安装以及配置
查看>>
Lua脚本语法说明
查看>>
It is indirectly referenced from required .class file
查看>>
jenkins 自动化集成测试配置(一)
查看>>
php openssl 加密和解密 注意事项
查看>>
进程和线程之间的关系.
查看>>
总结CString、string、char*
查看>>
设置listview,隔行不同style
查看>>