springboot+thymeleaf整合阿里云OOS对象存储图片的实现

下面是“springboot+thymeleaf整合阿里云OOS对象存储图片的实现”的完整攻略。

简介

在项目中,我们经常需要处理图片等文件的上传和展示,使用阿里云OOS对象存储服务可以实现文件的高可用、高并发和高扩展性,同时可以帮助我们节省服务器的存储空间和带宽成本。这篇文章将介绍如何在springboot项目中使用thymeleaf模板引擎展示阿里云OOS对象存储的图片。

准备工作

  1. 阿里云OOS对象存储服务账号。如果您还没有阿里云账号,可以前往阿里云官网注册账号。
  2. 创建一个OOS Bucket。前往OOS控制台,创建一个Bucket并记录下Bucket名称。
  3. 为Bucket添加一个公共读权限。在Bucket的权限设置中,添加一个公共读权限,以便我们能够通过URL访问到文件。

配置pom.xml文件

在项目的pom.xml中,添加aliyun-java-sdk和commons-io依赖:

<!-- 阿里云OOS SDK依赖 -->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.10.2</version>
</dependency>
<!-- commons-io依赖 -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.8.0</version>
</dependency>

配置application.yml文件

在application.yml文件中,添加阿里云OOS访问信息和Bucket信息:

aliyun:
  oos:
    access-key-id: your-access-key-id
    access-key-secret: your-access-key-secret
    endpoint: your-endpoint
    bucket-name: your-bucket-name

其中,access-key-idaccess-key-secret是阿里云OOS服务的Access Key ID和Access Key Secret,endpoint是OOS服务的Endpoint地址,bucket-name是创建的Bucket名称。

定义OSS服务配置类

创建OssService类,并使用@Autowired注解将其注入到其他需要使用OSS服务的类中。

@Service
public class OssService {
    @Autowired
    private Environment env;

    private String accessKeyId;
    private String accessKeySecret;
    private String endpoint;
    private String bucketName;

    private OSS ossClient;

    @PostConstruct
    public void init() {
        accessKeyId = env.getProperty("aliyun.oos.access-key-id");
        accessKeySecret = env.getProperty("aliyun.oos.access-key-secret");
        endpoint = env.getProperty("aliyun.oos.endpoint");
        bucketName = env.getProperty("aliyun.oos.bucket-name");

        ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }

    public String uploadFile(InputStream inputStream, String fileName) throws IOException {
        // 上传文件至OSS
        ossClient.putObject(bucketName, fileName, inputStream);

        // 获取文件URL
        Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000 * 24 * 365); // 一年有效期
        String url = ossClient.generatePresignedUrl(bucketName, fileName, expiration).toString();

        return url;
    }

    public void deleteFile(String fileName) {
        // 删除OSS上的文件
        ossClient.deleteObject(bucketName, fileName);
    }
}

其中,init()方法用于初始化OSS客户端,uploadFile()方法用于将文件上传至OSS并返回文件URL,deleteFile()方法用于删除OSS上的文件。

控制器层使用OSS服务

在控制器中,使用OssService.uploadFile()方法上传文件,并将返回的URL保存到Model中。

@Controller
public class HomeController {
    @Autowired
    private OssService ossService;

    @RequestMapping("/")
    public String index(Model model) throws IOException {
        // 上传图片并获取URL
        InputStream inputStream = getClass().getClassLoader().getResourceAsStream("static/images/avatar.png");
        String fileName = "images/avatar.png";
        String url = ossService.uploadFile(inputStream, fileName);

        // 将URL保存到Model中
        model.addAttribute("avatarUrl", url);

        return "index";
    }
}

使用thymeleaf展示图片

在thymeleaf模板中,使用th:src指令引用图片URL。

<img th:src="${avatarUrl}" />

示例一:上传本地图片

在项目中找到本地的图片文件,然后将其上传至阿里云OOS,并使用 thymeleaf 模板展示。

@Controller
public class HomeController {
    @Autowired
    private OssService ossService;

    @RequestMapping("/")
    public String index(Model model) throws IOException {
        // 上传本地图片并获取URL
        File file = new File("path/to/local/image.jpg");
        InputStream inputStream = new FileInputStream(file);
        String fileName = "images/image.jpg";
        String url = ossService.uploadFile(inputStream, fileName);

        // 将URL保存到Model中
        model.addAttribute("imageUrl", url);

        return "index";
    }
}

在 thymeleaf 模板中展示图片:

<img th:src="${imageUrl}" />

示例二:使用multipart/form-data上传文件

在前端页面中,使用form表单将文件上传至服务端,然后将文件上传至阿里云OOS,并使用 thymeleaf 模板展示。

@Controller
public class HomeController {
    @Autowired
    private OssService ossService;

    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    public String uploadFile(@RequestParam("file") MultipartFile file, Model model) throws IOException {
        // 上传文件至OSS并获取URL
        InputStream inputStream = file.getInputStream();
        String fileName = "images/" + file.getOriginalFilename();
        String url = ossService.uploadFile(inputStream, fileName);

        // 将URL保存到Model中
        model.addAttribute("fileUrl", url);

        return "success";
    }

    @RequestMapping("/upload")
    public String uploadForm() {
        return "upload";
    }
}

在thymeleaf模板中,将文件上传表单展示出来:

<form th:action="@{/upload}" th:object="${file}" method="post" enctype="multipart/form-data">
  <input type="file" name="file" />
  <button type="submit">上传文件</button>
</form>

展示上传的文件:

<img th:src="${fileUrl}" />

总结

本文主要介绍了如何在springboot项目中使用thymeleaf模板引擎展示阿里云OOS对象存储的图片。需要注意的是,使用阿里云OOS服务需要在配置时保证Access Key ID、Access Key Secret和Bucket权限设置的正确性。在开发过程中,可以根据实际需求使用示例一和示例二进行开发,希望能够帮助到读者。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot+thymeleaf整合阿里云OOS对象存储图片的实现 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 详解servlet的url-pattern匹配规则

    让我们详细讲解 Servlet 的 url-pattern 匹配规则。 在 Servlet 中,url-pattern 是用于匹配用户请求的一个关键属性。url-pattern 可以通过 web.xml 文件或者使用注解的方式进行配置。 下面是 url-pattern 的匹配规则及示例说明: 1. 精确匹配 通过 /path 的方式设置的 url-patte…

    Java 2023年6月15日
    00
  • 三种Web开发主流技术的性价评价

    接下来我将详细讲解三种Web开发主流技术的性价评价,希望能对您有所帮助。 一、HTML/CSS/JavaScript 性价比评价 HTML、CSS和JavaScript是Web开发中必不可少的三种技术,合称为前端技术。HTML用于网页结构的编写,CSS用于网页样式的设置,JavaScript用于网页交互和动态效果的实现。这三种技术在Web开发中有着广泛的应用…

    Java 2023年6月15日
    00
  • 浅谈JSP serverlet的区别与联系

    浅谈JSP和Servlet的区别与联系 JSP(Java Server Pages)和Servlet是Java Web开发中常见的两种技术。JSP是一种动态网页开发技术,它允许在HTML网页中嵌入Java代码,从而实现页面数据的动态生成和交互性的实现。而Servlet则是Java Web应用程序的一个组成部分,是运行在Web服务器上的Java程序,它可以在W…

    Java 2023年6月15日
    00
  • 使用JSP制作一个超简单的网页计算器的实例分享

    制作一个使用JSP制作一个超简单的网页计算器的实例方法如下: 第一步:新建一个JSP页面 首先,打开一个文本编辑器或者IDE,创建一个新文件,将文件的扩展名设置为 .jsp 即可。例如,我们新建一个 calculate.jsp 文件。 第二步:编写HTML代码 接下来,在新建的 calculate.jsp 文件中编写HTML代码,实现表单输入框和计算按钮。H…

    Java 2023年6月15日
    00
  • Struts2 OGNL调用公共静态方法详细介绍

    Struts2 OGNL调用公共静态方法详细介绍 在 Struts2 框架中,我们可以使用 OGNL(Object-Graph Navigation Language)表达式来操作对象的属性,其中 OGNL 还提供了一些常见的方式来调用对象的方法(如:size()、charAt()等等)。但有时我们需要调用位于公共静态类中的方法,那么该如何实现呢?本文将提供…

    Java 2023年6月15日
    00
  • Spring BOOT AOP基础应用教程

    Spring BOOT AOP基础应用教程 Spring AOP(面向切面编程)是Spring框架的一个重要组成部分,它可以帮助我们更好地管理和维护代码。在本文中,我们将介绍Spring Boot AOP的基础知识和应用方法。 步骤一:添加依赖 我们需要在pom.xml文件中添加Spring AOP的依赖。以下是一个示例: <dependency&gt…

    Java 2023年5月15日
    00
  • Java日常练习题,每天进步一点点(45)

    这里是关于“Java日常练习题,每天进步一点点(45)”的完整攻略: 1. 题目描述 该题目是一道字符串操作的练习题,在给定的字符串中找到第一个不重复的字符并返回其下标,如果不存在不重复的字符,就返回 -1。 2. 解题思路 字符串操作的题目,可以使用哈希表来解决。我们可以先遍历整个字符串,用哈希表来统计每个字符出现的次数,然后再次遍历字符串,找到第一个出现…

    Java 2023年5月26日
    00
  • Java笔记(17) 反射

    需求:根据配置文件 re.properties 中指定的信息,创建对象,并调用方法classfullpath=com.hiibird.Catmethod=hi 使用现有技术能做到吗? //首先读取配置文件 Properties properties = new Properties(); File file = new File(“./Reflection/…

    Java 2023年4月17日
    00
合作推广
合作推广
分享本页
返回顶部