SpringBoot项目打成jar包后,上传的静态资源(图片等)如何存储和访问

这篇具有很好参考价值的文章主要介绍了SpringBoot项目打成jar包后,上传的静态资源(图片等)如何存储和访问。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.问题描述:

使用springboot开发一个项目,开发文件上传的时候,通常会将上传的文件存储到资源目录下的static里面,然后在本地测试上传文件功能没有问题,但是将项目打成jar包放到服务器上运行的时候就会报错,找不到对应目录。或者可以将上传文件存储到和jar包同级的目录下,但是无法通过http访问到文件

SpringBoot项目打成jar包后,上传的静态资源(图片等)如何存储和访问,spring boot,jar,java

2.项目打成jar包后如何设置文件资源存储路径

!!!保存上传的资源文件路径,路径在部署jar包同级目录

//这里 /img/uploadFile/ 可以更改为不同层级的目录,可以跟开发时的静态目录统一
    String path = System.getProperty("user.dir")+"/static/img/uploadFile/";
    File dir = new File(path);
// 如果不存在则创建目录
    if(!dir.exists()){
        dir.mkdirs();
      }

SpringBoot项目打成jar包后,上传的静态资源(图片等)如何存储和访问,spring boot,jar,java

3.设置http访问上传的静态资源文件

在项目中创建一个config包,然后新建一个java类uploadConfig,用来设置上传的路径文章来源地址https://www.toymoban.com/news/detail-650188.html

package com.curry.config;
 
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
@Configuration
public class uploadConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/","file:static/");
    }
}
  • 接下来就可以通过http://ip:port/img/uploadFile/test.png来访问该文件了
  • 如果static的目录结构和项目里面的一样的话,就跟访问打jar包前一样访问即可,相当于通过目录结构访问相应的文件。

完整代码

package com.xxx.xxx.xxxx.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.Calendar;

@Controller
@RequestMapping("/admin")
public class UploadController {

    @RequestMapping("/upload")
    public String upload(MultipartFile file,
                         Model model) throws IOException {

        //校验文件是否为空
        if (file.isEmpty()){
            model.addAttribute("path","请选择文件上传!");
            return "admin/upload";
        }
        //图片重命名,防止图片名称重复,可以使用时间戳或者UUID生成,我这里不需要担心文件名重复,所以没做
        String originalFilename = file.getOriginalFilename();
        String filename = originalFilename;

        //上传图片,并判断是否有年份文件夹
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
//        String pre = System.getProperty("user.dir") + "/src/main/resources/static/img/paper/" + year +"/";
        String pre = System.getProperty("user.dir") + "/static/img/paper/" + year +"/";

        //file.mkdir创建一个文件夹,成功则返回true,失败则返回false。失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。
        File file1 = new File(pre);
        file1.mkdir();


        String path = pre + filename;
        file.transferTo(new File(path));

        model.addAttribute("path",path);
        return "admin/upload";
    }

}

到了这里,关于SpringBoot项目打成jar包后,上传的静态资源(图片等)如何存储和访问的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot项目打成jar包之后无法读取资源文件【jar包文件的读取方式】

    将文件放在resources目录下,确保资源文件被打包到jar包中 如何判断资源是否在jar包中,只需要解压jar包,然后查询资源名称即可 读取文件的时候写成绝对路径,肯定是不行的,这个很容易理解。 那读取文件的时候写相对路径是否可以呢?答案也是不行,见下面解释。 这是原

    2024年02月14日
    浏览(35)
  • SpringBoot访问静态资源和jar外部静态资源,部署前端打包后的vue项目放入静态资源里

    记录一下使用SpringBoot访问静态资源和SpringBoot打包之后的jar外部静态资源,在开发的时候,一般选择前后端分离的方式,前端使用vue 后端使用SpringBoot,通常情况下,部署都是前端通过http去请求后端资源,涉及到http请求,那么肯定需要资源的目标地址IP,一般云端部署给到I

    2024年02月09日
    浏览(59)
  • 解决java在idea运行正常,但是打成jar包后中文乱码问题

    目录 比如: 打包命令使用utf-8编码: 1.当在idea中编写的程序,运行一切正常.但是当被打成jar包时,执行的程序会中文乱码.产生问题的原因和解决方案是什么呢? 一.问题分析 分别使用idea和jar包形式打印出System中所有的jvm参数---代码如下:     idea的打印结果: jvm---key是: user.name

    2024年02月05日
    浏览(34)
  • Linux中Tomcat发布war包后无法正常访问非静态资源

    在CentOS8中安装完WEB环境,首次部署WEB项目DEMO案例,发现可以静态的网页内容, 但是无法向后台发送异步请求,全部出现 404 问题,导致数据库数据无法渲染到界面上。 CentOS请求中提示 用来获取资源的连接不安全 因为使用的 HTTP 协议访问的项目 不安全是正常的,请暂时忽略

    2024年02月09日
    浏览(38)
  • flutter项目引入本地静态图片资源并展示

    想要在flutter中引入静态资源,需要配置pubspec.yaml,将本地的静态资源添加到assets下面: 然后在flutter引入这些静态资源:  就可以在app中看到这个图片了:  也可以使用网络图片:

    2024年02月05日
    浏览(39)
  • idea把项目打成jar包步骤详解

            最近产品需要预研一个小功能,开始后在本地开发测试好之后,需要打成jar提供出去,今天弄完了,决定把这个步骤记录下来,便于以后轻车熟路。         打成jar要有mian方法的入口,所以我们在代码中需要定义一个main方法,然后通过这个main方法调用我们的核心逻

    2024年02月08日
    浏览(36)
  • SpringBoot 读取项目中静态资源文件

    PathMatchingResourcePatternResolver是一个 Ant模式通配符 的Resource查找器,可以用来查找类路径下或者文件系统中的资源。 ❗❗❗在SpringBoot中尽量 避免使用 ResourceUtils读取资源文件。 ResourceUtils.getFile() 获取的是资源文件的绝对路径,当项目打包为jar或者war包之后部署,资源文件的绝对

    2024年02月07日
    浏览(37)
  • 对于莫名其妙使用smarttomcat上传前端项目失败,上传css等静态资源失败等原因,及解决方法

    0:0:0:0:0:0:0:1 - - [30/Oct/2023:21:05:07 +0800] \\\"GET /css/%20common.css HTTP/1.1\\\" 404 648 0:0:0:0:0:0:0:1 - - [30/Oct/2023:21:05:07 +0800] \\\"GET /css/%20login.css HTTP/1.1\\\" 404 648 0:0:0:0:0:0:0:1 - - [30/Oct/2023:21:05:07 +0800] \\\"GET /img/%E4%B8%BB%E9%A1%B5.png HTTP/1.1\\\" 404 648 0:0:0:0:0:0:0:1 - - [30/Oct/2023:21:05:13 +0800] \\\"GET /css/%20common.css HTTP/1

    2024年02月06日
    浏览(39)
  • SpringBoot -05 SpringBoot web相关配置(静态资源访问、统一异常处理、文件上传、拦截器、统一跨域请求处理)

    小总结 SpringBoot是一个基于Spring的工具集,去帮我们完成了大量的配置。在SpringBoot中有一个约定大于配置的概念,就是他把我们很多第三方框架帮我们写好了,而且把我们整个第三方框架所需要的依赖全都通过起步依赖加进去了。开发中只需要加入起步依赖就可以实现某个场

    2024年02月01日
    浏览(35)
  • SpringBoot项目修改中静态资源,只需刷新页面无需重启项目(附赠—热加载)

    💢初衷💢       因为一遍遍修改并重启项目觉得很麻烦,所以刚开始就自己给项目配置了热加载,但奈何代码更新还是慢,还不如我重启一遍项目的速度,所以放弃了自己上网找到的热加载配置。直到我debugger前端代码时,问题出现了,因为我项目的前后端没有分离,所以

    2024年02月14日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包