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

作者:LinkinStar 时间:2022-01-27 07:15:41 

前言

看标题好像很简单的样子,但是针对使用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/

这样就能实现上传文件

最后的封装

工具类:

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

这个工具类依赖了


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());
}

最后效果


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

Follow up

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

总结

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

来源:http://www.cnblogs.com/linkstar/p/9938721.html

标签:spring,boot,上传文件,服务器,jar
0
投稿

猜你喜欢

  • 关于C# Math 处理奇进偶不进的实现代码

    2023-03-25 09:30:29
  • java文件操作之java写文件简单示例

    2023-10-21 14:37:13
  • java GUI实现学生图书管理简单实例

    2023-11-11 05:00:05
  • Android的Service应用程序组件基本编写方法

    2023-12-17 04:22:00
  • android自定义View实现圆环颜色选择器

    2023-11-07 19:16:02
  • Java锁的升级策略 偏向锁 轻量级锁 重量级锁

    2022-11-07 00:50:17
  • 基于Java实现经典蜘蛛纸牌游戏

    2021-09-06 15:22:57
  • Maven工程pom中如何定义jdk版本

    2022-02-18 08:16:13
  • 一文带你快速了解java中的static关键词

    2022-06-03 16:03:58
  • Android 获取屏幕尺寸实例代码

    2023-07-26 21:50:47
  • Android如何让WebView中的HTML5页面实现视频全屏播放

    2023-07-29 00:32:06
  • C#仪器数据文件解析Excel文件的方法浅析(xls、xlsx)

    2023-09-18 01:40:57
  • Java Swing JComboBox下拉列表框的示例代码

    2022-09-16 00:24:50
  • 纯Java代码实现流星划过天空

    2022-06-01 12:12:35
  • C#删除只读文件或文件夹(解决File.Delete无法删除文件)

    2022-06-30 15:01:59
  • Android 优化之卡顿优化的实现

    2022-03-03 21:34:25
  • Spring Boot之AOP配自定义注解的最佳实践过程

    2023-01-27 17:41:02
  • Android实现网易新闻客户端侧滑菜单(1)

    2023-09-12 00:54:05
  • C#实现文件上传以及多文件上传功能

    2023-06-19 15:36:17
  • Java8新特性Stream流实例详解

    2023-05-04 12:55:05
  • asp之家 软件编程 m.aspxhome.com