SpringBoot集成阿里云OSS实现图片存储服务

news2024/11/26 19:57:38

SpringBoot集成阿里云OSS实现图片存储服务

      • 1、OSS概述
      • 2、账号申请
        • 2.1 购买服务
        • 2.2 创建Bucket
      • 3、抽取模板工具
        • OssProperties配置类
        • OssTemplate模板对象
        • AutoConfiguration配置类
        • yml配置内容
      • 4、测试

阿里云OSS(Object Storage Service)是一种强大的云存储服务,可用于存储和管理大量的静态文件如图片、视频、音频等。Spring Boot与阿里云OSS集成,实现图片上传存储服务,具有以下场景和意义:

  • 分布式存储:使用阿里云OSS可以将图片等静态资源存储在云端,实现分布式的存储和管理。这样可以提高数据的可用性和可靠性,减少单点故障的风险,确保应用程序在面对高并发访问时能够快速响应。

  • 弹性扩展:阿里云OSS具备强大的扩展性,能够根据业务需求自动扩展存储容量和吞吐量。当应用程序的用户量增加,需要处理更多的图片上传请求时,可以依靠阿里云OSS的弹性扩展能力,无需担心系统性能的瓶颈问题。

  • 安全性保障:阿里云OSS提供了多种安全机制,如身份验证、权限管理等,可以控制用户对存储在OSS上的图片的访问权限。通过集成Spring Security等安全框架,可以实现对上传图片的访问控制和权限管理,确保只有授权的用户才能访问和下载图片。

  • 资源代理和加速:通过OSS的CDN(Content Delivery Network)特性,可以将存储在OSS上的图片缓存到全球各地的节点上,加速图片的传输和加载速度。这样可以提升用户访问图片的体验,减少网络延迟带来的等待时间,提高应用程序的性能。

  • 成本效益:使用阿里云OSS可以将存储和处理大量图片的成本转移给云服务提供商。OSS提供了灵活的计费方式,按照存储容量和网络流量进行计费,让开发者可以根据实际需求进行成本控制,并避免过度投入到硬件设备和维护上。

本文实现流程:

image-20230620075847664

1、OSS概述

对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。

地址:https://www.aliyun.com/product/oss

image-20230620082640789

2、账号申请

2.1 购买服务

如何购买开通服务。

image-20230620082945562

image-20230620082954129

购买下行流量包:(不购买也可以使用,按照流量付费)

image-20230620083008045

说明:OSS的上行流量是免费的,但是下行流量是需要购买的。

2.2 创建Bucket

使用OSS,首先需要创建Bucket,Bucket翻译成中文是水桶的意思,把存储的图片资源看做是水,想要盛水必须得有桶。进入控制台,https://oss.console.aliyun.com/overview

image-20230620083026579

选择Bucket后,即可看到对应的信息,如:url、消耗流量等 :

image-20230620083037609

文件管理:

image-20230620083046008

查看文件:

image-20230620083137039

3、抽取模板工具

阿里云OSS采用自定义工具的形式进行封装

image-20230620091736515

OssProperties配置类

@Data
@ConfigurationProperties(prefix = "tanhua.oss")
public class OssProperties {

    private String accessKey; 
    private String secret;
    private String bucketName;
    private String url; //域名
    private String endpoint;
}

OssTemplate模板对象

package com.tanhua.autoconfig.template;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.tanhua.autoconfig.properties.OssProperties;

import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

public class OssTemplate {

    private OssProperties properties;

    public OssTemplate(OssProperties properties) {
        this.properties = properties;
    }

    public String upload(String filename, InputStream is) {
        // 拼写图片路径
        filename = new SimpleDateFormat("yyyy/MM/dd").format(new Date())
                +"/"+ UUID.randomUUID().toString() + filename.substring(filename.lastIndexOf("."));


        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = properties.getEndpoint();
        // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
        String accessKeyId = properties.getAccessKey();
        String accessKeySecret = properties.getSecret();

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId,accessKeySecret);
        // 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
        ossClient.putObject(properties.getBucketName(), filename, is);
        // 关闭OSSClient。
        ossClient.shutdown();

        String url = properties.getUrl() +"/" + filename;
        return url;
    }
}

AutoConfiguration配置类

@EnableConfigurationProperties({
        OssProperties.class
})
public class AutoConfiguration {

    @Bean
    public OssTemplate ossTemplate(OssProperties properties) {
        return new OssTemplate(properties);
    }
}

yml配置内容

tanhua: # 都换成自己的
  oss:
    accessKey: LTAI4GKgob9vZ53k2SZdyAC7
    secret: LHLBvXmILRoyw0niRSBuXBZewQ30la
    endpoint: oss-cn-beijing.aliyuncs.com
    bucketName: tanhua001
    url: https://tanhua001.oss-cn-beijing.aliyuncs.com/

4、测试

编写测试类OssTest

@RunWith(SpringRunner.class)
@SpringBootTest(classes = AppServerApplication.class)
public class OssTest {

    @Autowired
    private OssTemplate template;

    @Test
    public void testTemplateUpload() throws FileNotFoundException {
        String path = "填自己的";
        FileInputStream inputStream = new FileInputStream(new File(path));
        String imageUrl = template.upload(path, inputStream);
        System.out.println(imageUrl);
    }
}

测试成功:

putStream = new FileInputStream(new File(path));
String imageUrl = template.upload(path, inputStream);
System.out.println(imageUrl);
}
}


测试成功:

![image-20230620091938050](https://img-blog.csdnimg.cn/img_convert/19d705a73cff538552695d9b0d4c5b1c.png)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/665481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASO优化之关于应用商店的展示量

应用的展示数据代表应用在整个应用市场内的曝光次数,被展示的位置包括:首页精品推荐,搜索结果列表,应用详情页等。 应用的展示数据是衡量ASO搜索优化的关键指标。当关键词的覆盖数增加了,展示的次数没有增加&#xff…

【Nacos源码系列】服务注册的原理

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 文章目录 Nacos介绍服务注册客户端注册服务端 总结 Nacos介绍 Nacos是一个基于云原生的动态服务发现、配置管理和服务治理平台&#xff…

cppzmq编译和使用(ubuntu22.04)

libzmq libzmq,也称为 ZeroMQ,是一个高性能、异步消息传递库,用于构建分布式和并发系统。它提供了简单而强大的原语,使得开发者可以方便地在应用程序之间进行异步通信。 以下是对 libzmq 的详细介绍: 简介&#xff1…

VOC数据洞察在淘宝详情页的应用与实践

本专题共10篇内容,包含淘宝APP基础链路过去一年在用户体验数据科学领域(包括商详、物流、性能、消息、客服、旅程等)一些探索和实践经验,本文为该专题第二篇。 在商详页基于用户动线和VOC挖掘用户决策因子带来浏览体验提升&#x…

如何使用 PowerPoint 2021 制作演示文稿(PPT)?

软件安装:办公神器office2021安装教程,让你快速上手_正经人_____的博客-CSDN博客 引言 PowerPoint 是一款非常常用的演示文稿制作工具,它可以帮助您创建漂亮的幻灯片,展示您的想法和信息。如果您是 PowerPoint 的新手&#xff…

如何选择初始化向量【密码学】(5)

目录 一、分组算法如何计算 二、什么影响算法的安全性 三、密钥的使用次数限制 一、分组算法如何计算 分组算法包括3个部分:数据分组,分组运算和链接模式。 数据分组:将数据分割成加密函数能够处理的数据块,如果不能整分&#x…

【MYSQL篇】mysql不同存储引擎中索引是如何实现的?

前言 不同的存储引擎文件是不一样,我们可以查看数据文件目录: show VARIABLES LIKE datadir;每 张 InnoDB 的 表 有 两 个 文 件 ( .frm 和 .ibd ), MyISAM 的 表 有 三 个 文 件 (.frm、.MYD、.MYI&…

简单的PWN堆栈溢出的尝试

这是一道2018年西电CTF线下赛的一道ez_pwn的小题目,该题目为堆栈溢出漏洞的利用1 本次实验环境为 ubuntu 20.0.4 使用工具:GDB pwngdb 首先分析文件大致情况 checksec ez_pwn Arch: amd64-64-little 表示该二进制文件是 64 位的 。 RELRO: Partial R…

计算机网络课程设计——中小型网络工程设计

文件地址:https://github.com/Recursiondzl/Computer-Network github里面有课设文件,别白嫖,点个star哦 摘 要:本次计算机网络实践,完成了中小型网络工程设计与实现对计算机网络知识进行了系统的复习,实践能力获得了…

0基础学习VR全景平台篇第45篇:编辑器底部菜单- 关联场景功能操作

大家好,欢迎观看蛙色VR官方系列——后台使用课程! 本期为大家带来蛙色VR平台,底部菜单—关联场景功能操作。 一、本功能将用在哪里? 关联场景,是某个场景下的子场景,也可以理解为VR漫游作品的三级分组&…

1-简单回归问题

一.梯度下降(gradient descent) 1.预测函数 这里有一组样本点,横纵坐标分别代表一组有因果关系的变量 我们的任务是设计一个算法,让机器能够拟合这些数据,帮助我们算出参数w 我们可以先随机选一条过原点的直线&#xf…

【GESP】2023年03月图形化一级 -- 小猫捉老鼠

文章目录 小猫捉老鼠1. 准备工作2. 功能实现3. 设计思路与实现(1)角色、舞台背景设置a. 角色设置b. 舞台背景设置 (2)脚本编写a. 角色:Mouse1b. 角色:Cat 2 4. 评分标准 小猫捉老鼠 1. 准备工作 &#xff…

Vue3项目中使用vue-router

目录 1、Vue Router 的主要概念和功能2、什么是 vue-router?3、为什么需要 vue-router?4、基本概念和安装4.1 了解单页面应用(SPA)和路由的基本概念4.1.1单页面应用(Single Page Application,SPA)4.1.2路由…

【运维知识进阶篇】zabbix5.0稳定版详解3(监控Nginx+PHP服务状态信息)

这篇文章继续给大家介绍zabbix监控,监控Nginx、PHP等服务,其实非常简单,难点在于如何去取这个值,包括监控业务,难点在于思路是否清晰,思维是否活跃,如何去进行判断是否有这个业务,并…

小白到运维工程师自学之路 第三十四集 (redis的基本使用)

一、概念 Redis是一个开源的内存数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等。Redis的特点是数据存储在内存中,因此读写速度非常快,同时也支持数据持…

【Vue3+Ts project】认识 @vueuse/core 库

目标: 根据屏幕宽度改变 实现动态获取盒子的宽度 目录 目标: 一、javascript实现 二、vueuse/core 库实现 一、javascript实现 1.首先 window.innerWidth 获取当前屏幕宽度,然后将 盒子宽度 除 375 乘 当前屏幕宽度 150 / 375 * window.innerWidth 2.将获取的…

千万不要跟随这 4 种领导!

​ 见字如面,我是军哥! 最近有程序员读者问我,什么样的领导不能跟随?都有哪些坑!这个我擅长哈,毕竟职场混迹 15 年~ 第一种,技术能力不行还喜欢指手画脚的领导。 第二种,…

鹏云网络分布式块存储社区版问世,首发开源存储解决方案

2023年1月,南京鹏云网络科技有限公司(简称:鹏云网络)正式宣布开源ZettaStor DBS分布式块存储系统,开放了自研10余年的分布式块存储技术,自此踏上了“自研”与“开源”一体并行的生态闭环之路。 研发十年&am…

python程序获取最新的行政区划名称代码

一、实现目标 最近由于项目需要,需要获取最新的过去全国县以上行政区划的名称和代码。网上虽然有一些资料,但是不是需要积分就是需要会员,而且担心这些资料不是最新的。因此,想着使用程序从官方网站上获取最新的全国行政区划数据。 二、实现思路 1、找到官方最新发布的全国…

c++11 标准模板(STL)(std::basic_ios)(五)

定义于头文件 <ios> template< class CharT, class Traits std::char_traits<CharT> > class basic_ios : public std::ios_base 类 std::basic_ios 提供设施&#xff0c;以对拥有 std::basic_streambuf 接口的对象赋予接口。数个 std::basic_ios…