2.阿里云對象存儲OSS

1.對象存儲概述

????????文件上傳,是指將本地圖片、視頻、音頻等文件上傳到服務器上,可以供其他用戶瀏覽或下載的過程。文件上傳在項目中應用非常廣泛,我們經常發抖音、發朋友圈都用到了文件上傳功能。

實現文件上傳服務,需要有存儲的支持,解決方案有以下幾種:

存儲方式優點缺點
直接保存到硬盤開發便捷,成本低擴容困難
分布式文件系統容易實現擴容開發復雜,需要成熟產品支持
第三方存儲服務開發簡單,強大功能, 免維護付費

2.阿里云對象存儲OSS

阿里云登錄 - 歡迎登錄阿里云,安全穩定的云計算服務平臺歡迎登錄阿里云,全球領先的云計算及人工智能科技公司,阿里云為200多個國家和地區的企業、開發者和政府機構提供云計算基礎服務及解決方案。阿里云云計算、安全、大數據、人工智能、企業應用、物聯網等云計算服務。https://oss.console.aliyun.com/

2.1 阿里云對象存儲OSS配置

2.1.1 創建OSS Bucket

????????登錄阿里云控制臺,申請ECS服務器、申請對象存儲OSS、在OSS管理頁面創建一個Bucket,Bucket是存儲空間的容器,類似于文件夾。選擇Bucket的地域、訪問權限等設置。

2.1.2 獲取AccessKey

????????在阿里云控制臺獲取AccessKey ID和AccessKey Secret,這是訪問OSS的憑證。

2.2 項目中使用對象存儲OSS

2.2.1 配置AccessKey ID和AccessKey Secret

sky:alioss:endpoint: oss-cn-chengdu.aliyuncs.comaccess-key-secret: B4CZYBn9zyoKjQzdN5sQNvdxaWJSuyaccess-key-id: LTAI5tAKNiTtEJaPdE3omMi3bucket-name: luobeilearn

2.2.2 配置配置類

@Configuration
@Slf4j
public class OssConfiguration {@Bean@ConditionalOnMissingBeanpublic AliOssUtil aliOssUtil(AliOssProperties aliOssProperties){log.info("開始上傳阿里云文件上傳工具類對象:{}",aliOssProperties);return new AliOssUtil(aliOssProperties.getEndpoint(),aliOssProperties.getAccessKeyId(),aliOssProperties.getAccessKeySecret(),aliOssProperties.getBucketName());}
}

2.2.3 創建阿里云屬性類

@Component
@ConfigurationProperties(prefix = "sky.alioss")
@Data
public class AliOssProperties {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;}

2.2.4 創建工具類

@Data
@NoArgsConstructor
@AllArgsConstructor
@Slf4j
public class AliOssUtil {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;/*** 文件上傳** @param bytes* @param objectName* @return*/public String upload(byte[] bytes, String objectName) {// 創建OSSClient實例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);try {// 創建PutObject請求。ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(bytes));} catch (OSSException oe) {System.out.println("Caught an OSSException, which means your request made it to OSS, "+ "but was rejected with an error response for some reason.");System.out.println("Error Message:" + oe.getErrorMessage());System.out.println("Error Code:" + oe.getErrorCode());System.out.println("Request ID:" + oe.getRequestId());System.out.println("Host ID:" + oe.getHostId());} catch (ClientException ce) {System.out.println("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with OSS, "+ "such as not being able to access the network.");System.out.println("Error Message:" + ce.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}//文件訪問路徑規則 https://BucketName.Endpoint/ObjectNameStringBuilder stringBuilder = new StringBuilder("https://");stringBuilder.append(bucketName).append(".").append(endpoint).append("/").append(objectName);log.info("文件上傳到:{}", stringBuilder.toString());return stringBuilder.toString();}
}

2.2.5 在Controller中使用

@RestController
@RequestMapping("/admin/common")
@Api(tags = "通用接口")
@Slf4j
public class CommonController {@Autowiredprivate AliOssUtil aliOssUtil;@PostMapping("/upload")@ApiOperation("文件上傳")public Result<String> upload(MultipartFile file){log.info("文件上傳");try {//原始文件名String originalFilename = file.getOriginalFilename();//截取原始文件名后綴String substring = originalFilename.substring(originalFilename.lastIndexOf("."));String objectName = UUID.randomUUID().toString()+substring;String filePath = aliOssUtil.upload(file.getBytes(),objectName);return Result.success(filePath);} catch (IOException e) {log.error("文件上傳失敗:{}",e);}return Result.error(MessageConstant.UPLOAD_FAILED);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39405.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39405.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39405.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【概念理解】STM32中的sprintf()函數

sprintf()函數 這個函數在 stdio.h中&#xff1b;可以將格式化的數據寫入到一個字符串緩沖區中。 int sprintf(char *str, const char *format, ...);str&#xff1a;指向字符數組的指針&#xff0c;即用于存儲格式化后字符串的緩沖區。format&#xff1a;格式化字符串&#…

(十六)大數據實戰——安裝使用mysql版的hive服務

前言 hive默認使用的是內嵌據庫derby&#xff0c;Derby 是一個嵌入式數據庫&#xff0c;可以輕松地以庫的形式集成到應用程序中。它不需要獨立的服務器進程&#xff0c;所有的數據存儲在應用程序所在的文件系統中。為了支持hive服務更方便的使用&#xff0c;我們使用mysql數據…

Centos 8和Centos 7中配置阿里云的 yum 源

YUM源簡介 yum是一種在Linux環境下安裝、更新和刪除軟件包的軟件管理器。通過yum&#xff0c;用戶可以輕松地從軟件倉庫中搜索和安裝包含所需軟件的軟件包&#xff0c;并自動處理所需的依賴關系。此外&#xff0c;yum還可以與其他軟件管理工具配合使用&#xff0c;例如rpm。它…

【實戰】十一、看板頁面及任務組頁面開發(一) —— React17+React Hook+TS4 最佳實踐,仿 Jira 企業級項目(二十三)

文章目錄 一、項目起航&#xff1a;項目初始化與配置二、React 與 Hook 應用&#xff1a;實現項目列表三、TS 應用&#xff1a;JS神助攻 - 強類型四、JWT、用戶認證與異步請求五、CSS 其實很簡單 - 用 CSS-in-JS 添加樣式六、用戶體驗優化 - 加載中和錯誤狀態處理七、Hook&…

c語言每日一練(8)

前言&#xff1a;每日一練系列&#xff0c;每一期都包含5道選擇題&#xff0c;2道編程題&#xff0c;博主會盡可能詳細地進行講解&#xff0c;令初學者也能聽的清晰。每日一練系列會持續更新&#xff0c;暑假時三天之內必有一更&#xff0c;到了開學之后&#xff0c;將看學業情…

【javaweb】學習日記Day1 - HTML CSS入門

目錄 一、圖片標簽 ① 絕對路徑 1.絕對磁盤路徑 2.絕對網絡路徑 ② 相對路徑 &#xff08;推薦&#xff09; 二、標題標簽 三、水平線標簽 四、標題樣式 1、CSS引入樣式 ① 行內樣式 ② 內嵌樣式 ③ 外嵌樣式 2、CSS選擇器 ① 元素選擇器 ② id選擇器 ③…

Hadoop+Python+Django+Mysql熱門旅游景點數據分析系統的設計與實現(包含設計報告)

系統闡述的是使用熱門旅游景點數據分析系統的設計與實現&#xff0c;對于Python、B/S結構、MySql進行了較為深入的學習與應用。主要針對系統的設計&#xff0c;描述&#xff0c;實現和分析與測試方面來表明開發的過程。開發中使用了 django框架和MySql數據庫技術搭建系統的整體…

Python批量給excel文件加密

有時候我們需要定期給公司外部發郵件&#xff0c;在自動化發郵件的時候需要對文件進行加密傳輸。本文和你一起來探索用python給單個文件和批量文件加密。 ?? python自動化發郵件可參考【干貨】用Python每天定時發送監控郵件。 文章目錄 一、安裝pypiwin32包二、定義給excel加…

【Docker】Docker使用之容器技術發展史

&#x1f3ac; 博客主頁&#xff1a;博主鏈接 &#x1f3a5; 本文由 M malloc 原創&#xff0c;首發于 CSDN&#x1f649; &#x1f384; 學習專欄推薦&#xff1a;LeetCode刷題集 &#x1f3c5; 歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff0…

【Unity】UI的一些簡單知識

Canvas 新建一個Canvas Render Mode Canvas 中有一個Render Mode&#xff08;渲染模式&#xff09;&#xff0c;有三種渲染模式: Screen Space-Overlay &#xff08;屏幕空間&#xff09;Screen Space-Camara 、 World Space 其中&#xff0c;Space- Overlay是默認顯示在…

使用Spring Boot和Redis實現用戶IP接口限流的詳細指南

系列文章目錄 文章目錄 系列文章目錄前言一、準備工作二、編寫限流過濾器三、配置Redis四、測試接口限流總結 前言 在高并發場景下&#xff0c;為了保護系統免受惡意請求的影響&#xff0c;接口限流是一項重要的安全措施。本文將介紹如何使用Spring Boot和Redis來實現用戶IP的…

數據統計與可視化的Dash應用程序

在數據分析和可視化領域&#xff0c;Dash是一個強大的工具&#xff0c;它結合了Python中的數據處理庫&#xff08;如pandas&#xff09;和交互式可視化庫&#xff08;如Plotly&#xff09;以及Web應用程序開發框架。本文將介紹如何使用Dash創建一個簡單的數據統計和可視化應用程…

移動端網頁中的前端視頻技術探索

引言 隨著移動設備的普及和網絡速度的提升&#xff0c;移動端網頁中的視頻播放已經成為了越來越重要的功能需求。本篇博客將介紹一些在移動端網頁中實現前端視頻播放的技術探索&#xff0c;并提供詳細的代碼示例。 1. 基本視頻標簽 在移動端網頁中實現視頻播放最基本的方法就…

【C++學習手札】一文帶你初識運算符重載

食用指南&#xff1a;本文在有C基礎的情況下食用更佳 &#x1f340;本文前置知識&#xff1a; C類 ??今日夜電波&#xff1a;クリームソーダとシャンデリア—Edo_Ame江戶糖 1:20 ━━━━━━?&#x1f49f;──────── 3:40 …

ID3 決策樹

西瓜數據集D如下: 編號色澤根蒂敲聲紋理臍部觸感好瓜1青綠蜷縮濁響清晰凹陷硬滑是2烏黑蜷縮沉悶清晰凹陷硬滑是3烏黑蜷縮濁響清晰凹陷硬滑是4青綠蜷縮沉悶清晰凹陷硬滑是5淺白蜷縮濁響清晰凹陷硬滑是6青綠稍蜷濁響清晰稍凹軟粘是7烏黑稍蜷濁響稍糊稍凹軟粘是8烏黑稍蜷濁響清晰…

idea cannot download sources 解決方法

問題 點擊class文件右上角下載源碼失敗 解決方案 找到idea terminal 控制臺cd 至maven工程執行 mvn dependency:resolve -Dclassifiersources

【IMX6ULL驅動開發學習】04.應用程序和驅動程序數據傳輸和交互的4種方式:非阻塞、阻塞、POLL、異步通知

一、數據傳輸 1.1 APP和驅動 APP和驅動之間的數據訪問是不能通過直接訪問對方的內存地址來操作的&#xff0c;這里涉及Linux系統中的MMU&#xff08;內存管理單元&#xff09;。在驅動程序中通過這兩個函數來獲得APP和傳給APP數據&#xff1a; copy_to_usercopy_from_user …

24屆近3年上海電力大學自動化考研院校分析

今天給大家帶來的是上海電力大學控制考研分析 滿滿干貨&#xff5e;還不快快點贊收藏 一、上海電力大學 學校簡介 上海電力大學&#xff08;Shanghai University of Electric Power&#xff09;&#xff0c;位于上海市&#xff0c;是中央與上海市共建、以上海市管理為主的全日…

stack 、 queue的語法使用及底層實現以及deque的介紹【C++】

文章目錄 stack的使用queue的使用適配器queue的模擬實現stack的模擬實現deque stack的使用 stack是一種容器適配器&#xff0c;具有后進先出&#xff0c;只能從容器的一端進行元素的插入與提取操作 #include <iostream> #include <vector> #include <stack&g…

Layui列表復選框根據條件禁用

// 禁用客服回訪id有值的復選框res.data.forEach(function (item, i) {if (item.feedbackEmpId) {let index res.data[i][LAY_TABLE_INDEX];$(".layui-table tr[data-index"index"] input[typecheckbox]").prop(disabled,true);$(".layui-table tr[d…