阿里云OSS

目录

第三方服务-通用思路

SDK

准备工作

阿里云OSS-入门程序

.putObject

如何拿到文件对应的字节数组?

.readAllBytes()

集成阿里云OSS完成文件上传

引入阿里云OSS文件上传的工具类

上传文件接口开发

.getOriginalFilename()

程序优化

参数配置化

@Value

@ConfigurationProperties


阿里云对象存储OSS(Object Storage Service),是一款海量、安全、低成本、高可靠的云存储服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。

我们在前端进行文件上传时,依然正常请求我们的服务器端,我们会将上传上来的文件交给阿里云OSS来进行存储和管理,阿里云OSS会为每个文件分配一个访问的路径,我们通过这个路径就可以直接访问阿里云OSS的这个文件

第三方服务-通用思路

第一步操作就是需要去做一些准备工作,我们要使用第三方的云服务,我们就需要去注册对应的账号,注册完账号还需要进行实名认证,实名认证完了我们就可以登录到对应的后台系统了,那登录进去后哦我们还要根据需要进行充值,这些都是一些准备工作

第二步我们就要开始编写入门程序了,我们只要参照官方的SDK去编写入门程序就可以了

SDK

Software Development Kit的简写,就是软件开发工具包,这个SDK就包括我们进行软件开发时所需要的依赖,以及代码的事例,这些都可以叫做SDK,那我们就可以参照SDK提供的代码示例来编写入门程序

第三步操作就是将其集成到我们的项目中,在项目中集成使用

准备工作

我们要使用阿里云就得注册阿里云的账号,注册完账号还需要进行实名认证,实名认证之后我们就可以登录到阿里云的后台了,登录到后台之后我们可以根据自己的需要去充值,只要大家存储的文件不多,几十M,其实你充不充值都可以,那如果说你存储的文件比较多,我要存储个几百M,那你充值个一块钱就足够使用了,紧接着第三步我们就要开通对应的云服务了,我们所要使用的服务是对象存储服务OSS,所以我们这里需要开通对象存储服务,接下来第四步我们需要去创建对象存储服务的存储空间,叫bucket,这个存储空间是存储对象的容器,再次强调对象存储服务所指的对象其实就是这个文件,而我们将来存储的文件都是要隶属于这个Bucket,第五步就是获取并配置这个AccessKey秘钥,这个秘钥就是我们阿里云身份的凭证,最终我们在代码中如果你想去使用这个云服务,那你就必须要去配置对应的AccessKey

阿里云OSS-入门程序

在Maven项目中加入依赖项,此时我们需要引入依赖

如果使用的是Java 9及以上的版本,则需要添加以下JAXB相关依赖。

我们来演示一下如何进行文件上传

我们点击复制代码,将所有代码复制过来然后做一个改造就可以了

在Demo中定义了这样一个main方法,在main方法中,它来完成文件上传的入门程序

endpoint代表的是我们所使用的阿里云OSS所对应的bucket,它的域名是什么,我们要到刚刚后台创建的buket去看一下我们的域名是什么,

在概览下面有一个访问端口的Endpoint(地域节点),我们知己复制这个地址直接将域名给它替换掉

注意:前面的协议不要替换,只替换后面的域名,都是htps协议

接下来是bucket的名字,替换成自己的bucket名字

objectName代表的是我们在对象存储服务中存储的对象的名字,其实就是文件的名字,将来你将文件传到这个存储空间中,那这个文件名叫什么呢?这一块需要指定一下,那将来我们需要上传的是一张图片,那我们就可以指定为001.jpg

region代表的是地域,我们选择的地域是北京,默认是cn-hangzhou,那我们这里改成cn-beijing就可以了

.putObject

进行文件上传的方法

当然在这个Demo中,它上传的是一个Hello OSS的字符串,但是我们这里不需要上传字符串,我要上传的是一个文件

如何拿到文件对应的字节数组?

File file = new File("");
byte[] bytes = Files.readAllBytes(file.toPath());

“”里面存放文件

.readAllBytes()

用于从文件系统中读取文件的所有字节

第二步读取这个文件,将这个文件读取成了一个字节数组

这样我们就完成了文件上传的代码改造

点击运行,返回阿里云OSS即可发现有了文件

点击001.jpg,有文件的访问路径,阿里云OSS会为每个文件分配一个访问路径,我们通过这个路径就可以访问这张图片了

那如果有了这个路径,将来前端想要呈现这个图片直接拿到这个路径,就可以通过image将这个图片渲染展示出来了

文件上传需要请求服务器端的程序,那就去请求我们文件上传的Controller,在Controller中需要接收上传上来的文件,接收上来之后我们需要将文件存储起来,我们需要将这个文件存到阿里云OSS中去,而阿里云OSS中我们是可以创建多个存储空间的,也就是多个bucket,所以我们在这一块需要指定我们这个文件要存储到哪个bucket中,当阿里云OSS将这些文件存储起来之后,它会为每个文件分配一个访问路径,所以此时我们需要将这个返回路径再返回给Controller,Controller最终要将图片的访问路径,也就是访问的URL,返回给前端,那前端拿到这个URL就可以基于这个URL来访问阿里云OSS里的这张图片了,最终在前端页面就会将这张图片展示出来

集成阿里云OSS完成文件上传

引入阿里云OSS文件上传的工具类

这个工具类实际上是由官方的实例代码改造而来的,在项目中,我们直接调用这个工具类就可以完成文件上传了

上传文件接口开发

我们需要定义一个uploadController,在uploadController中开发这个文件上传的接口

.getOriginalFilename()

拿到文件的原始名称

在APIfox中,文件上传选择Body——from-data——file

程序优化

在刚才我们制作的AliyunOSS操作的工具类中,我们直接将 endpoint、bucketName参数直接在java文件中写死了

而如果开发一个大型项目,所有用到的技术涉及到的这些个参数全部写死在java代码中,是非常不便于维护和管理的

我们通常将这些容易变动的参数信息定义在一份文件中,在SpringBoot中我们通常会将其定义在application,yml这份配置文件中,也就说将这些参数配置到这份配置文件中,然后在Java代码中如果要用到这些参数呢,我直接去读取配置文件当中的这块参数信息就可以了

参数配置化

指将依稀需要灵活变化的参数,配置在配置文件中,然后通过@Value注解来注入外部配置的属性

我们要想用到这些参数怎么办呢

@Value

在SpringBoot中有一个@Value注解,我们直接通过@Value注解注入外部配置的这些属性

我直接声明一个成员变量,然后在成员变量上加上一个注解,叫@Value,然后通过@Value来注入对应的配置项就可以了,大括号里面要写的就是yml配置文件中的key,你要将每一个配置项的值注入这个属性成员变量,最终在程序运行时这几个成员变量就有值了,那以后我如果想更改这个参数,我就不用再去动这个java代码了,我只需要动这个yml配置文件就可以了

但是使用@Value注解注入配置文件的配置项,如果配置项多,注入繁琐,需要一项一项注入,此时不便于维护管理 和 复用

大家想其他类中,我也需要用到这些个配置项怎么办?你是不是需要通过@Value再挨个在注入一次? 所以不便于代码的复用

那如果说我们需要注入的配置项比较多,在Spring中其实又提供了另外一种注解来简化这块的配置

@ConfigurationProperties

通过@ConfigurationProperties,我们就可以实现批量注入,我们可以一次性将多个配置项的值直接封装到一个实体类AliyunOSSProperties中,那以后如果你想获取到这些个配置项,你直接获取这些实体类中的属性就可以了

如果说我们想将配置项直接封装到一个实体类中,实体类中的属性名,需要与配置项中的这个key保持一致,那有endpoint这个key,就需要有endpoint这个属性,配置项对应的值要封装到实体类对应的属性中去,而要想完成封装,就要为这些实体类提供get,set方法,然后还要将这个实体类交给IOC容器管理,所以在实体类上还加了一个注解叫@Component,

配置文件凭什么能将阿里云OSS里面这个key下面的endpoint这个子key赋值给这个成员变量呢?

所以此时我们还要在实体类上再加上一个注解叫@ConfigurationProperties,而在@ConfigurationProperties这个注解中有个属性叫prefix,这个属性代表的是前缀的意思,那就表示这个实体类要封装的是配置文件中哪一个前缀下面的配置信息,那我这里要封装的是aliyun.oss这个前缀下的信息,这样程序运行的时候,他就可以将配置文件中这多个配置项的值直接封装到这个实体类中

其实这个实体类就是一个Bean对象,那在其他Bean对象中,我们要想获取这个属性的值,我们直接去注入这个Bean对象,然后去调用这个Bean对象的get,set方法就可以获取到对应的属性,在其他对象我也想获取到这个属性的值,我直接再次注入这个Bean对象就可以了,这样你可以发现,我一次操作以后在想使用,我直接注入这个Bean就可以获取到配置项的值了,便于我们程序的复用

注入外部配置文件中的配置项的两种方式?

  • @Value:一个属性一个属性的注入
  • @ConfigurationProperties:批量将多个属性注入到Bean对象中

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

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

相关文章

李宏毅NLP-4-语音识别part3-CTC

Connectionist Temporal Classification|CTC 基于连接主义时间分类(CTC)的语音识别架构,具体描述如下: 输入层:底部的 x 1 , x 2 , x 3 , x 4 x^1, x^2, x^3, x^4 x1,x2,x3,x4代表输入的语音信号分帧数据…

如何构建类似云数据仓库 Snowflake 的本地数据仓库?

目录 一、Snowflake 架构的三大核心价值 二、本地数据仓库要“像 Snowflake”,关键在数据服务化 三、SQL2API:本地数据服务共享的核心引擎 ✅ 什么是 SQL2API? ✅ 为什么是构建本地类 Snowflake 架构的关键? 四、QuickAPI&a…

设计模式 - 单例模式

一个类不管创建多少次对象,永远只能得到该类型一个对象的实力 常用到的,比如日志模块,数据库模块 饿汉式单例模式:还没有获取实例对象,实例对象就已经产生了 懒汉式单例模式:唯一的实例对象,…

【Windows Cmake工程配置Boost库】

Windows Cmake工程配置Boost库 背景配置流程1. 下载Boost库2. 配置环境变量3. 修改CmakeLists背景 Windows环境下使用cmake开发程序,如图需要用到boost库,但是从官网下载的boost库源码没有编译成功,于是从网上下载boost预编译库,直接配置。 配置流程 1. 下载Boost库 官…

长期坚持的本质,看重休息,看轻自律

01 你有没有这样的经历, 年初立下减肥20斤、读完100本书、旅行10次等目标, 年中发现进度太慢, 于是降低年初目标, 但年终完成度仍然不及格。 只好跨年时将希望寄托于来年, 明年复明年,明年何其多。 …

Python实现贪吃蛇三

上篇文章Python实现贪吃蛇一,实现了一个贪吃蛇的基础版本。后面第二篇文章Python实现贪吃蛇二修改了一些不足,但最近发现还有两点需要优化: 1、生成食物的时候有概率和记分牌重合 2、游戏缺少暂停功能 先看生成食物的时候有概率和记分牌重合的…

LSTM概述

一、LSTM的背景与动机 1.1 为什么需要LSTM? 在深度学习中,普通的神经网络(如全连接网络或卷积神经网络)在处理序列数据时表现不佳,因为它们无法捕捉数据中的时间依赖关系。循环神经网络(RNN)被设计来处理序列数据,通过隐藏状态在时间步之间传递信息。然而,传统RNN存…

DDS信号发生器设计

一、基本概述 1.1 DDS简介 DDS信号发生器即直接数字频率合成(Direct Digital Frequency Synthesis,简称DDS)是一种利用数字技术生成信号的方法。它通过数字信号处理技术,将数字信号转换为模拟信号,从而生成高质量的正…

生成式AI:如何用大模型呼叫系统提升销售转化率?

生成式AI技术正以惊人的速度重塑商业版图。从智能助手到自动化营销,从数据分析到客户洞察,生成式AI正在颠覆传统商业模式,云蝠智能以大模型、智能体为核心技术,致力于为百万企业提供语音互动智能体平台与解决方案,为企业在销售转化…

OOP丨《Java编程思想》阅读笔记Chapter 6 : 访问权限控制

《Java编程思想》Chapter 6 : 访问权限控制 1. 前言 1.1. 访问权限控制的等级1.2. package关键字的引入 2. 包:库单元 2.1. 代码组织2.2. 包名的创建 3. Java访问权限修饰词 3.1. 包访问权限3.2. public: 接口访问权限3.3. private: 你无法访问3.4. protected: 继承…

reconic 天空 模型

目录 推理代码: EnvLight 代码: 推理代码: sky_model self.models["Sky"]outputs["rgb_sky"] sky_model(image_info)outputs["rgb_sky_blend"] outputs["rgb_sky"] * (1.0 - outputs["opa…

从服务器多线程批量下载文件到本地

1、客户端安装 aria2 下载地址:aria2 解压文件,然后将文件目录添加到系统环境变量Path中,然后打开cmd,输入:aria2c 文件地址,就可以下载文件了 2、服务端配置nginx文件服务器 server {listen 8080…

C++ | 可变模板参数

1. 为什么需要可变模板参数? 在C11之前,若想实现一个接受任意数量参数的函数,只能依赖va_list等C风格可变参数,但这种方式类型不安全且难以调试。例如printf函数: printf("%d %f %s", 10, 3.14, "hel…

【机器学习】每日一讲-朴素贝叶斯公式

文章目录 **一、朴素贝叶斯公式详解****1. 贝叶斯定理基础****2. 从贝叶斯定理到分类任务****3. 特征独立性假设****4. 条件概率的估计** **二、在AI领域的作用****1. 文本分类与自然语言处理(NLP)****2. 推荐系统****3. 医疗与生物信息学****4. 实时监控…

AI Agents系列之AI代理的类型

在本文中,我们将探讨不同类型的 AI 代理,包括它们的实现、实际应用、优势和局限性。从简单反射代理到多代理系统,我们将了解这些模型如何推动自动化、决策制定和智能问题解决。 文章目录 1. AI代理的类型1.1 简单反射代理1.1.1 实现**1.1.2 优势****1.1.3 局限性**1.2 基于…

C# --- IEnumerable 和 IEnumerator

C# --- IEnumerable 和 IEnumerator IEnumerableIEnumeratorIEnumerable 和 IEnumerator 的作用手动实现 IEnumerableIEnumerable vs. IQueryable为什么有了ienumerator还需要ienumerable IEnumerable 在C#中,IEnumerable 是一个核心接口,用于表示一个可…

镜舟科技助力某大型电网企业破解数据架构升级难题,打造国产化湖仓标杆

在 “十四五” 规划全面推进国产化替代的背景下,某大型电网企业联合镜舟科技与腾讯云,基于全球领先的开源分析型数据库 StarRocks 及腾讯 TBDS 大数据平台,构建电力行业国产化湖仓一体架构。该项目实现 PB 级电力数据的统一管理,为…

Spark-SQL核心编程3

数据加载与保存 通用方式: SparkSQL 提供了通用的保存数据和数据加载的方式。这里的通用指的是使用相同的API,根据不同的参数读取和保存不同格式的数据,SparkSQL 默认读取和保存的文件格式为parquet 数据加载方法: spark.read.lo…

使用HTML + CSS + JS,编写一个台球追分计分器

目录 一.代码 二.效果展示 三.该计分器的优点 一.代码 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

LLM小白自学笔记:1.两种指令微调

一、LoRA 简单来说&#xff0c;LoRA不直接调整个大模型的全部参数&#xff08;那样太费资源&#xff09;&#xff0c;而是在模型的某些层&#xff08;通常是注意力层&#xff09;加个“旁路”——两个小的矩阵&#xff08;低秩矩阵&#xff09;。训练时只更新这俩小矩阵&#x…