文件上傳到騰訊云存儲、簽名及設置過期時間

將文件上傳到騰訊云對象存儲(COS,Cloud Object Storage)可以通過騰訊云提供的 SDK 實現。以下是詳細的步驟和示例代碼,幫助您完成文件上傳操作。


步驟

  1. 注冊騰訊云賬號并創建存儲桶

    (1)登錄騰訊云控制臺,進入?對象存儲 COS。(2)創建一個存儲桶(Bucket),并獲取存儲桶的名稱和所屬地域(Region)。
  2. 獲取 API 密鑰

    在騰訊云控制臺的?訪問管理?中,獲取您的?SecretId?和?SecretKey
  3. 添加騰訊云 COS SDK 依賴

    在項目中引入騰訊云 COS 的 Java SDK。
  4. 編寫 Java 代碼上傳文件

    使用 SDK 提供的 API 上傳文件到騰訊云 COS。

依賴庫

在 Maven 項目pom.xml添加以下依賴:

<dependency><groupId>com.qcloud</groupId><artifactId>cos_api</artifactId><version>5.6.89</version>
</dependency>

示例代碼

以下是一個完整的 Java 示例代碼,演示如何將本地文件上傳到騰訊云 COS:

import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.exception.CosClientException;
import com.qcloud.cos.region.Region;
import lombok.extern.slf4j.Slf4j;/*** 騰訊cos文件上傳工具類**/
@Slf4j
public class TencentCOSUtil {//創建鏈接public static COSClient getCOSClient() {try {// 1. 初始化用戶身份信息(SecretId 和 SecretKey)String accessKey = "your accessKey";String secretKey = "your secretKey";COSCredentials cred = new BasicCOSCredentials(accessKey, secretKey);// 2. 設置存儲桶的地域Region region = new Region("ap-guangzhou");ClientConfig clientConfig = new ClientConfig(region);// 創建COClient實例。return new COSClient(cred, clientConfig);} catch (Exception e) {throw new BusinessException("創建騰訊云OSS連接失敗");}}}

? 上傳文件

/*** 上傳文件。** @param inputStream 以流的方式上傳文件* @param path        上傳的文件存放路徑* @param fileName    指定的文件名* @param suffix      上傳的文件后綴* @return 文件在服務器上的全路徑*/public static String upLoad(InputStream inputStream, String path, String fileName, String suffix, boolean signFlag) {if (inputStream == null) {return null;}String bucketName = "your bucketName";String endpoint = "your endpoint";String fileUrl = null;// 文件名格式SimpleDateFormat sdf = new SimpleDateFormat(DatePattern.PURE_DATETIME_PATTERN);String newFileName = null;if (StrUtil.isNotBlank(fileName)) {newFileName = fileName + RandomUtil.randomString(5) + "." + suffix;} else {newFileName = sdf.format(new Date()) + RandomUtil.randomString(5) + "." + suffix;}String filePath = path + "/" + newFileName;fileUrl = endpoint + "/" + filePath;COSClient cosClient = getCOSClient();try {// 創建上傳Object的MetadataObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setCacheControl("no-cache");objectMetadata.setHeader("Pragma", "no-cache");// 上傳文件PutObjectResult putResult = cosClient.putObject(bucketName, filePath, inputStream, objectMetadata);if (putResult != null) {fileUrl = signFlag ? generatePresignedUrl(cosClient, fileUrl) : fileUrl;}} catch (CosClientException oe) {log.error(oe.getMessage());throw oe;} finally {cosClient.shutdown();}log.info("[cosUpLoad]文件全路徑fileUrl={}", fileUrl);return fileUrl;}

文件簽名及設置過期時間

public static String generatePresignedUrl(COSClient cosClient, String fileUrl) {String bucketName="your bucketName";if (StrUtil.isBlankIfStr(fileUrl)) {return fileUrl;}if (cosClient == null) {cosClient = getCOSClient();}// 設置URL過期時間Date expiration = DateUtil.offsetMinute(new Date(), 3);try {String filePath = new URL(fileUrl).getPath().substring(1);filePath = URLDecoder.decode(filePath, "UTF-8");// 生成以GET方法訪問的簽名URL,訪客可以直接通過瀏覽器訪問相關內容。URL url = cosClient.generatePresignedUrl(bucketName, filePath, expiration);return url.toString();} catch (CosClientException ce) {log.error("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with COS, "+ "such as not being able to access the network.");log.error("Error Message:" + ce.getMessage());} catch (MalformedURLException e) {log.error("[cosSignedUrl]文件地址格式有誤", e);} catch (UnsupportedEncodingException e) {log.error("[cosSignedUrl]中文文件地址轉換異常", e);} finally {if (cosClient != null) {cosClient.shutdown();}}return null;}

調用上傳方法上傳文件

public static void main(String[] args) {//從數據庫查詢業務數據List<UserData> projectList = new ArrayList<>();ByteArrayOutputStream out = new ByteArrayOutputStream();EasyExcel.write(out, UserData.class).sheet(0).doWrite(projectList);String fileUrl = null;try {fileUrl = TencentCOSUtil.upLoad(new ByteArrayInputStream(out.toByteArray()),"userData" + "/" + DateUtil.format(new Date(), "yyyy-MM"),"用戶信息","xlsx", true);} catch (Exception e) {log.error("[userData]導出失敗:", e);} finally {if (out != null) {try {out.close();} catch (IOException e) {log.error("[userData]關閉流失敗", e);}}}if (fileUrl != null) {log.info("導出成功,文件fileUrl={}",fileUrl);}log.info("導出失敗,文件fileUrl={}",fileUrl);}

代碼說明

  1. 初始化身份信息

    使用?SecretId?和?SecretKey?創建?COSCredentials?對象。
  2. 設置存儲桶地域

    根據存儲桶的地域(如?ap-beijing)創建?ClientConfig?對象。
  3. 創建 COSClient

    使用?COSCredentials?和?ClientConfig?創建?COSClient?實例。
  4. 上傳文件

    指定存儲桶名稱、本地文件路徑和文件在 COS 上的存儲路徑(Key)。使用?PutObjectRequest?創建上傳請求,并調用?cosClient.putObject()?方法上傳文件。
  5. 關閉 COSClient

    上傳完成后,調用?cosClient.shutdown()?關閉客戶端。

關鍵參數

  • SecretId 和 SecretKey:騰訊云 API 密鑰,用于身份驗證。

  • BucketName:存儲桶名稱,格式為?<BucketName-APPID>,例如?examplebucket-1250000000

  • Region:存儲桶所在地域,例如?ap-beijing(北京)。

  • Key:文件在 COS 上的存儲路徑,例如?uploads/file.txt


注意事項

  1. 權限設置

    (1)確保存儲桶的權限設置為允許上傳。(2)如果需要公開訪問,可以設置文件的訪問權限為公共讀。
  2. 文件大小限制

    單個文件上傳最大支持 5 TB。如果文件較大,建議使用分塊上傳(SDK 也支持分塊上傳 API)。
  3. 安全性

    不要將?SecretId?和?SecretKey?硬編碼在代碼中,建議使用環境變量或配置文件管理。

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

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

相關文章

基于Java(SpringBoot)+MySQL+Vue實現的平行志愿錄取系統

基于spring bootvue實現的平行志愿錄取系統 1.項目簡介 這兩天干上高考出成績&#xff0c;有不少親戚家的孩子今年高考&#xff0c;和我詢問關于報志愿的問題。老家河北今年是采用所謂的平行志愿。我看了很多的資料才明白什么叫所謂的“平行志愿”。 整個流程好像很是復雜。…

chrome瀏覽器chromedriver下載

chromedriver 下載地址 https://googlechromelabs.github.io/chrome-for-testing/ 上面的鏈接有和當前發布的chrome瀏覽器版本相近的chromedriver 實際使用感受 chrome瀏覽器會自動更新&#xff0c;可以去下載最新的chromedriver使用&#xff0c;自動化中使用新的chromedr…

Redis常見數據類型與編碼方式

??前言?? 本小節圍繞Redis中常見的數據類型與編碼方式展開。 &#x1f349;歡迎點贊 &#x1f44d; 收藏 ?留言評論 &#x1f349;博主將持續更新學習記錄收獲&#xff0c;友友們有任何問題可以在評論區留言 &#x1f349;博客中涉及源碼及博主日常練習代碼均已上傳GitHu…

win編譯openssl

一、perl執行腳本 1、安裝perl腳本 perl安裝 2、配置perl腳本 perl Configure VC-WIN32 no-asm no-shared --prefixE:\openssl-x.x.x\install二、編譯openssl 1、使用vs工具編譯nmake 如果使用命令行nmake編譯會提示“無法打開包括文件: “limits.h”“ 等錯誤信息 所以…

【Kubernetes Pod間通信-第2篇】使用BGP實現Pod到Pod的通信

Kubernetes中Pod間的通信 本系列文章共3篇: 【Kubernetes Pod間通信-第1篇】在單個子網中使用underlay網絡實現Pod到Pod的通信【Kubernetes Pod間通信-第2篇】使用BGP實現Pod到Pod的通信(本文介紹)【Kubernetes Pod間通信-第3篇】Kubernetes中Pod與ClusterIP服務之間的通信…

< 自用文兒 > 下載 MaxMind GeoIP Databases 對攻擊的 IP 做 地理分析

起因 兩個 VPM/VPS&#xff0c;安裝了 fail2ban 去攔截密碼窮舉攻擊。每天的記錄都在增長&#xff0c;以前復制屏幕輸出就行&#xff0c;一屏的內容還容易粘貼出來的。昨天已經過 500 條&#xff0c;好奇 fail2ban 是如何存儲這些內容的&#xff1f;就發現它在使用 SQLite3 數…

SpringCloudGateWay和Sentinel結合做黑白名單來源控制

假設我們的分布式項目&#xff0c;admin是8087&#xff0c;gateway是8088&#xff0c;consumer是8086 我們一般的思路是我們的請求必須經過我們的網關8088然后網關轉發到我們的分布式項目&#xff0c;那我要是沒有處理我們繞過網關直接訪問項目8087和8086不也是可以&#xff1…

C#面試常考隨筆12:游戲開發中常用的設計模式【C#面試題(中級篇)補充】

C#面試題&#xff08;中級篇&#xff09;&#xff0c;詳細講解&#xff0c;幫助你深刻理解&#xff0c;拒絕背話術&#xff01;-CSDN博客 簡單工廠模式 優點&#xff1a; 根據條件有工廠類直接創建具體的產品 客戶端無需知道具體的對象名字&#xff0c;可以通過配置文件創建…

數字人|通過語音和圖片來創建高質量的視頻

簡介 arXiv上的計算機視覺領域論文&#xff1a; AniPortrait: Audio-Driven Synthesis of Photorealistic Portrait Animation AniPortrait&#xff1a;照片級真實感肖像動畫的音頻驅動合成 核心內容圍繞一種新的人像動畫合成框架展開。 研究內容 提出 AniPortrait 框架&a…

數據結構實戰之線性表(三)

目錄 1.順序表釋放 2.順序表增加空間 3.合并順序表 4.線性表之鏈表實現 1.項目結構以及初始代碼 2.初始化鏈表(不帶頭結點) 3.鏈表尾部插入數據并顯示 4.鏈表頭部插入數據 5.初始化鏈表&#xff08;帶頭結點&#xff09; 6.帶頭結點的鏈表頭部插入數據并顯示 7.帶頭結…

Docker使用指南(一)——鏡像相關操作詳解(實戰案例教學,適合小白跟學)

目錄 1.鏡像名的組成 2.鏡像操作相關命令 鏡像常用命令總結&#xff1a; 1. docker images 2. docker rmi 3. docker pull 4. docker push 5. docker save 6. docker load 7. docker tag 8. docker build 9. docker history 10. docker inspect 11. docker prune…

C++基礎day1

前言&#xff1a;謝謝阿秀&#xff0c;指路阿秀的學習筆記 一、基礎語法 1.構造和析構: 類的構造函數是一種特殊的函數&#xff0c;在創建一個新的對象時調用。類的析構函數也是一種特殊的函數&#xff0c;在刪除所創建的對象時調用。 構造順序&#xff1a;父類->子類 析…

嘗試ai生成figma設計

當聽到用ai 自動生成figma設計時&#xff0c;不免好奇這個是如何實現的。在查閱了不少資料后&#xff0c;有了一些想法。參考了&#xff1a;在figma上使用腳本自動生成色譜 這篇文章提供的主要思路是&#xff1a;可以通過腳本的方式構建figma設計。如果我們使用ai 生成figma腳本…

iOS 老項目適配 #Preview 預覽功能

前言 iOS 開發者 最憋屈的就是UI 布局慢,一直以來沒有實時預覽功能,雖然swiftUI 早就支持了,但是目前主流還是使用UIKit在布局,iOS 17 蘋果推出了 #Preview 可以支持UIKit 實時預覽,但是僅僅是 iOS 17,老項目怎么辦呢?于是就有了這篇 老項目適配 #Preview 預覽 的文章,…

【分布式架構理論2】分布式架構要處理的問題及解決方案

文章目錄 1. 應用服務拆分2. 分布式調用3. 分布式協同4. 分布式計算5. 分布式存儲6. 分布式資源管理與調度7. 高性能與可用性優化8. 指標與監控 將分布式架構需要解決的問題按照順序列舉為如下幾步 問題分類具體內容應用服務拆分分布式是用分散的服務和資源代替集中的服務和資…

【PyQt】pyqt小案例實現簡易文本編輯器

pyqt小案例實現簡易文本編輯器 分析 實現了一個簡單的文本編輯器&#xff0c;使用PyQt5框架構建。以下是代碼的主要功能和特點&#xff1a; 主窗口類 (MyWindow): 繼承自 QWidget 類。使用 .ui 文件加載用戶界面布局。設置窗口標題、狀態欄消息等。創建菜單欄及其子菜單項&…

Unity中的虛擬相機(Cinemachine)

Unity Cinemachine詳解 什么是Cinemachine Cinemachine是Unity官方推出的智能相機系統&#xff0c;它提供了一套完整的工具來創建復雜的相機運動和行為&#xff0c;而無需編寫大量代碼。它能夠大大簡化相機管理&#xff0c;提高游戲開發效率。 Cinemachine的主要組件 1. Vi…

【PyQt】getattr動態訪問對象的屬性

問題 使用qtdesigner設計好大體的軟件結構&#xff0c;需要使用代碼進行批量修改控件樣式,self.ui.x 會被解釋為訪問 self.ui 中名為 x 的屬性&#xff0c;而不是將 x 作為變量名來解析&#xff0c;此時需要通過字符串動態訪問 self.ui 中的按鈕對象 for i in range(20):x f…

【電腦系統】電腦突然(藍屏)卡死發出刺耳聲音

文章目錄 前言問題描述軟件解決方案嘗試硬件解決方案嘗試參考文獻 前言 在 更換硬盤 時遇到的問題&#xff0c;有時候只有卡死沒有藍屏 問題描述 更換硬盤后&#xff0c;電腦用一會就卡死&#xff0c;藍屏&#xff0c;顯示藍屏代碼 UNEXPECTED_STORE_EXCEPTION 軟件解決方案…

DEEPSEKK GPT等AI體的出現如何重構工廠數字化架構:從設備控制到ERP MES系統的全面優化

隨著深度學習&#xff08;DeepSeek&#xff09;、GPT等先進AI技術的出現&#xff0c;工廠的數字化架構正在經歷前所未有的變革。AI的強大處理能力、預測能力和自動化決策支持&#xff0c;將大幅度提升生產效率、設備管理、資源調度以及產品質量管理。本文將探討AI體&#xff08…