SpringBoot 上传文件到本服务器目录与 jar 包同级问题 SpringBoot 上传文件到本服务器目录与 jar 包同级问题是一个常见的问题。当我们使用 SpringBoot 的 jar 包发布项目时,上传文件存放会变得非常复杂。因为我们无法对 jar 包里面的资源进行操作,而对于 SpringBoot 项目来说,我们只能读取里面的文件,只能使用 InputStream。 原因是我们无法操作 jar 包内容,所以我们只能将文件存放在别的位置,与 jar 包同级的目录是一个不错的选择。我们可以使用 ClassPathResource 来读取资源文件,例如: `ClassPathResource classPathResource = new ClassPathResource("static/a.txt");` `classPathResource.getInputStream();` 其中,这个 a.txt 文件存放在 resources/static 目录下。 为了解决这个问题,我们可以将文件存放在与 jar 包同级的 static/upload 目录下。我们需要获取根目录: `File path = new File(ResourceUtils.getURL("classpath:").getPath());` `if (!path.exists()) { path = new File(""); }` 然后,我们可以获取需要的目录,并创建 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/` 我们可以使用工具类来实现上传文件,例如: `@RequestMapping("/upload")` `@ResponseBody` `public String upload(MultipartFile file) throws IOException {` ` return "文件存放路径为" + FileHandleUtil.upload(file.getInputStream(), "image/", file.getOriginalFilename());` `}` 这个工具类依赖了 commons-fileupload 和 commons-io 两个库,可以根据自己的需要进行修改和扩展。 解决 SpringBoot 上传文件到本服务器目录与 jar 包同级问题需要我们使用 ClassPathResource 来读取资源文件,并将文件存放在与 jar 包同级的目录下。同时,我们需要在 application.yml 配置中指定静态资源的目录,使得上传的文件能够被外部访问到。
- 粉丝: 6
- 资源: 988
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助