阿里云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.pswp.cn/web/76041.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76041.shtml
英文地址,請注明出處:http://en.pswp.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…