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日

相关文章

  • Spring batch批处理框架

    请允许我给您详细讲解“Spring Batch批处理框架”的完整攻略。 什么是Spring Batch? Spring Batch是Spring官方提供的一个用于大规模处理数据任务的框架。它能够对大量数据进行统一标准化集中处理,适用于许多任务,如大批量数据的ETL(Extract-Transform-Load),数据清理,报表生成等。基于Spring Bat…

    Java 2023年5月20日
    00
  • 详解java连接mysql数据库的五种方式

    文章:详解Java连接MySQL数据库的五种方式 介绍 在Java应用中,我们经常需要连接数据库,而MySQL数据库是很受欢迎的一种关系型数据库。本文将详细介绍Java连接MySQL数据库的五种方式。 方式一:JDBC Java Database Connectivity (JDBC) 是Java平台下一项用于执行SQL语句的Java API,基本上,所有J…

    Java 2023年5月19日
    00
  • java 非对称加密算法RSA实现详解

    Java 非对称加密算法RSA实现详解 什么是非对称加密算法? 非对称加密算法指的是在加密和解密过程中分别使用两个不同的密钥,即公钥和私钥。公钥可以公开,任何人都可以使用公钥对信息进行加密,但只有私钥持有者才能解密被加密的信息。非对称加密算法具有安全性高、密钥分配方便等优点,因此被广泛应用于数据传输、数字证书等场景。 RSA算法简介 RSA算法是一种典型的非…

    Java 2023年5月19日
    00
  • Java Apache Commons报错“InterruptedIOException”的原因与解决方法

    当使用Java的Struts框架时,可能会遇到“ActionServletMappingException”错误。这个错误通常由以下原因之一起: ActionServlet配置错误:如果ActionServlet配置错误,则可能会出现此错误。在这种情况下,需要检查ActionServlet配置以解决此问题。 ActionServlet无效:如果ActionS…

    Java 2023年5月5日
    00
  • java WebSocket 服务端实现代码

    下面是实现Java WebSocket服务端的完整攻略,包括示例说明。 准备工作 在开始编写WebSocket服务端代码之前,需要先确保拥有以下条件: Java开发环境,最好使用JDK8或以上版本。 WebSocket API,Java提供了JSR-356标准的WebSocket API,可以通过Maven添加依赖以使用API。 <dependency…

    Java 2023年5月19日
    00
  • Java遍历起止日期中间的所有日期操作

    下面是Java遍历起止日期中间的所有日期的完整攻略: 前置条件 在使用Java进行日期遍历之前,首先需要使用Java提供的LocalDate类来表示起止日期。 LocalDate startDate = LocalDate.of(2021, 5, 1); LocalDate endDate = LocalDate.of(2021, 5, 10); 上面的代码…

    Java 2023年5月20日
    00
  • Java多线程之CAS算法实现线程安全

    Java多线程之CAS算法实现线程安全攻略 什么是CAS算法 CAS是英文单词Compare And Swap的缩写。CAS算法是一种无锁算法,它通过三个操作数:内存地址、旧的预期值和新值,当且仅当预期值和内存地址值相同时,才会将内存地址值更新为新值。CAS算法属于乐观锁技术的一种,线程不会阻塞,而是采用一种自旋的方式去检查更新,直到成功为止。 CAS算法的…

    Java 2023年5月19日
    00
  • 浅析Java中对象的创建与对象的数据类型转换

    这里是“浅析Java中对象的创建与对象的数据类型转换”的攻略。 1. 对象的创建 Java中的对象可以由new关键字创建,一个对象的创建需要以下步骤: 分配对象的内存空间:在堆内存中为新对象分配一片连续的空间,这个空间的大小由对象的数据类型和属性决定。 执行构造函数:在分配好内存空间之后,JVM会执行对象的构造函数,初始化对象的属性值等。 将对象的引用返回给…

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