對象存儲介紹(騰訊雲cos)

什麼是對象存儲

對象存儲是一種將數據作為對象進行管理的計算機數據存儲體系結構,與其他存儲體系結構(例如將數據作為文件層級管理的文件系統)以及將數據作為塊和扇區內的塊進行管理的塊存儲相對。每個對象通常包括數據本身,可變數量的元數據和全局唯一標識符

對象存儲可以在多個級別實現,包括設備級別(對象存儲設備),系統級別和接口級別。在每種情況下,對象存儲都試圖實現其他存儲架構無法解決的功能,例如可以由應用程序直接編程的接口,可以跨越多個物理硬件實例的命名空間,以及數據管理功能,如數據復制和數據分發在對象級粒度。

相比於數據庫這種面向結構化數據存儲的技術對象存儲主要面向存儲大量的非結構化數據通俗來說,我們日常生活中生成的照片、視頻、音頻、文檔等都屬於非結構化數據。這些日常產生的數據都適合存儲在對象存儲中

現在幾乎所有公有雲服務商都提供對象存儲服務,如果要在企業內部使用,也可以采用元核雲、紫光西數這類專業存儲公司提供的企業級對象存儲產品。

騰訊雲cos使用指南

阿裡雲對象存儲:oss
騰訊雲對象存儲:cos
本文主要對騰訊雲cos進行介紹

1、進入管理控制臺

開通OSS服務還會額外贈送50G半年的免費容量


開通服務之後首先要創建一個存儲桶,我理解應該就是類似於一個獨立的存儲空間,你可以針對這個存儲桶設置訪問權限,我這裡是要用來做圖床,所以是設定瞭私有寫和公有讀



2、測試通過控制臺,上傳文件



上傳成功後,可以查看到上傳的圖片詳情

集成騰訊雲cos

騰訊雲OSS的SDK文檔
此處作者使用的開發語言為java,騰訊雲OSS的javaSDK文檔
使用SDK需要一些必要信息,比如secret_key和secret_id,這個可以從API密鑰管理頁面獲取。

環境依賴
SDK 支持 JDK 1.7、1.8及以上版本。

1、修改配置

             <dependency>            <groupId>com.qcloud</groupId>            <artifactId>cos_api</artifactId>            <version>5.6.54</version>        </dependency>                <dependency>            <groupId>joda-time</groupId>            <artifactId>joda-time</artifactId>        </dependency>

2、添加配置文件內容

# 服務端口server.port=8205# 服務名spring.application.name=service-oss#返回json的全局時間格式spring.jackson.date-format=yyyy-MM-dd HH:mm:ssspring.jackson.time-zone=GMT+8#騰訊雲api秘鑰idtencent.yun.secretid=#騰訊雲api秘鑰keytencent.yun.secretkey=

3、創建初始化配置的工具類

/** * 在主啟動類啟動時初始化配置文件中的內容 * 

* 創建時間: 2022-03-24 14:46 * * @author v_fuxshen * @version v1.0.0 * @since v1.0.0 */@Componentpublic class ConstantOssPropertiesUtils implements InitializingBean {@Value("${tencent.yun.secretid}")private String secretId;@Value("${tencent.yun.secretkey}")private String secretKey;public static String Tencent_secretId;public static String Tencent_secretKey;@Overridepublic void afterPropertiesSet() throws Exception {Tencent_secretId = secretId;Tencent_secretKey = secretKey;}}

4、測試如何創建存儲桶

public class OssTest {public static void main(String[] args) {// 1 初始化用戶身份信息(secretId, secretKey)。        // SECRETID和SECRETKEY請登錄訪問管理控制臺 https://console.cloud.tencent.com/cam/capi 進行查看和管理String secretId = "";String secretKey = "";COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);        // 2 設置 bucket 的地域, COS 地域的簡稱請參照 https://cloud.tencent.com/document/product/436/6224       // clientConfig 中包含瞭設置 region, https(默認 http), 超時, 代理等 set 方法, 使用可參見源碼或者常見問題 Java SDK 部分。Region region = new Region("ap-guangzhou");//此處設置的地域為廣州ClientConfig clientConfig = new ClientConfig(region);       // 這裡建議設置使用 https 協議       // 從 5.6.54 版本開始,默認使用瞭 httpsclientConfig.setHttpProtocol(HttpProtocol.https);       // 3 生成 cos 客戶端。COSClient cosClient = new COSClient(cred, clientConfig);//創建存儲桶  如果騰訊雲cos中已經存在存儲通,那麼此步驟可省略String bucket = ""; //存儲桶名稱,格式:BucketName-APPIDCreateBucketRequest createBucketRequest = new CreateBucketRequest(bucket);        // 設置 bucket 的權限為 Private(私有讀寫)、其他可選有 PublicRead(公有讀私有寫)、PublicReadWrite(公有讀寫)createBucketRequest.setCannedAcl(CannedAccessControlList.PublicRead);try{Bucket bucketResult = cosClient.createBucket(createBucketRequest);} catch (CosServiceException serverException) {serverException.printStackTrace();} catch (CosClientException clientException) {clientException.printStackTrace();}}}

5、編寫接口實現

controller

@RestController@RequestMapping("/api/oss/file")@Api(tags = "騰訊雲cos接口")public class FileApiController {@Autowiredprivate FileService fileService;@PostMapping("fileUpload")@ApiOperation(value = "上傳文件到騰訊雲")public Result fileUpload(MultipartFile file){//獲取上傳文件(返回的為文件存儲的路徑)String url = fileService.fileUpload(file);        return Result.success(url);}}

service

@Service@Slf4jpublic class FileServiceImpl implements FileService {@Overridepublic String fileUpload(MultipartFile file) {// 1 初始化用戶身份信息(secretId, secretKey)。// SECRETID和SECRETKEY請登錄訪問管理控制臺 https://console.cloud.tencent.com/cam/capi 進行查看和管理String secretId = ConstantOssPropertiesUtils.Tencent_secretId;String secretKey = ConstantOssPropertiesUtils.Tencent_secretKey;COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);// 2 設置 bucket 的地域, COS 地域的簡稱請參照 https://cloud.tencent.com/document/product/436/6224// clientConfig 中包含瞭設置 region, https(默認 http), 超時, 代理等 set 方法, 使用可參見源碼或者常見問題 Java SDK 部分。Region region = new Region("ap-guangzhou");ClientConfig clientConfig = new ClientConfig(region);// 這裡建議設置使用 https 協議// 從 5.6.54 版本開始,默認使用瞭 httpsclientConfig.setHttpProtocol(HttpProtocol.https);// 3 生成 cos 客戶端。COSClient cosClient = new COSClient(cred, clientConfig);// 指定文件將要存放的存儲桶String bucketName = "yygh-bucket-1307593240";              //文件名稱 為瞭保證文件名稱唯一,此處使用uuid來設置文件名稱String filename = UUID.randomUUID().toString().replaceAll("-","") +"_"+file.getOriginalFilename();        //目錄的生成 當前日期SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");String date = dateFormat.format(new Date());// 指定文件上傳到 COS 上的路徑,即對象鍵。例如對象鍵為folder/picture.jpg,則表示將文件 picture.jpg 上傳到 folder 路徑下//此處目錄規則為  當前日期/文件名稱String key = date+"/"+filename;PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, multipartFileToFile(file));PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);log.info("putObjectResult:"+putObjectResult);//刪除本地上傳資源delteTempFile(multipartFileToFile(file));Date expiration = new Date(new Date().getTime() + 5 * 60 * 10000);GeneratePresignedUrlRequest req =new GeneratePresignedUrlRequest(bucketName, key, HttpMethodName.GET);// 設置簽名過期時間(可選), 若未進行設置, 則默認使用 ClientConfig 中的簽名過期時間(1小時)// 可以設置任意一個未來的時間,推薦是設置 10 分鐘到 3 天的過期時間req.setExpiration(expiration);URL url = cosClient.generatePresignedUrl(req);//關閉客戶端cosClient.shutdown();//拼接文件地址StringBuffer stringBuffer = new StringBuffer().append(url.getProtocol()).append("://").append(url.getHost()).append(url.getPath());return stringBuffer.toString();}/** * 此方法將multipartFile轉為file * * @param file * @return java.io.File * @author v_fuxshen * @date 2022-03-24 15:10:03 **/private File multipartFileToFile(MultipartFile file)  {File toFile = null;if (file.equals("") || file.getSize() <= 0) {file = null;} else {try {InputStream ins = null;ins = file.getInputStream();toFile = new File(file.getOriginalFilename());inputStreamToFile(ins, toFile);ins.close();} catch (IOException e) {e.printStackTrace();}}return toFile;}/** * 獲取流文件 * @param ins * @param file */private static void inputStreamToFile(InputStream ins, File file) {try {OutputStream os = new FileOutputStream(file);int bytesRead = 0;byte[] buffer = new byte[8192];while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {os.write(buffer, 0, bytesRead);}os.close();ins.close();} catch (Exception e) {e.printStackTrace();}}/** * 刪除本地臨時文件 * @param file */public static void delteTempFile(File file) {if (file != null) {File del = new File(file.toURI());del.delete();}}}


本文來自網絡,不代表程式碼花園立場,如有侵權,請聯系管理員。https://www.codegarden.cn/article/30290/
返回顶部