likes
comments
collection
share

腾讯云对象存储COS的Java版SDK初探

作者站长头像
站长
· 阅读数 27

什么是对象存储

采用比较官方的说法就是,就是基于对象的存储,和文件结构差不多,但是不具备层次,所有的文件都是同级存储在一个扁平化的存储池(存储桶)中。

当然,这些文字东西就不去深究,对象存储能够简化项目中对象的存储问题,将对象存储与系统分离,分开管理优化,特别是在现在云计算流行的趋势下,对象存储已经逐渐走上舞台。

腾讯云对象存储COS

COS是腾讯云提供的一种存储海量文件的分布式存储服务,用户可通过网络随时存储和查看数据。腾讯云 COS 使所有用户都能使用具备高扩展性、低成本、可靠和安全的数据存储服务。

COS 通过控制台、API、SDK 和工具等多样化方式简单、快速地接入,实现了海量数据存储和管理。通过 COS 可以进行多格式文件的上传、下载和管理。腾讯云提供了直观的 Web 管理界面,同时遍布全国范围的 CDN 节点可以对文件下载进行加速。

COS下载与安装

  1. 首先当然是从腾讯云中购买COS服务。
  2. 下载SDK,这里主要讲述两种方法。
  • maven引用安装(新版旧版二选一):
<dependency>// 新版的SDK
     <groupId>com.tencentcloudapi</groupId>
     <artifactId>tencentcloud-sdk-java</artifactId>
     <version>3.0.8</version>
     <!-- 注:这里只是示例版本号,请到 https://mvnrepository.com/artifact/com.tencentcloudapi/tencentcloud-sdk-java 获取最新版本号 -->
</dependency>
<dependency>// 旧版SDK,推荐使用新版
    <groupId>com.qcloud</groupId>
    <artifactId>cos_api</artifactId>
    <version>5.5.7</version>
</dependency>

初始化客户端

		// 在腾讯云的密钥中心创建密钥,然后拿到SecretId和SecretKey
		String secretId = "your_id";
		String secretKey = "your_key";
		COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
		// bucket的地域,地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
		Region region = new Region("ap-chengdu");
		// config可以设置请求参数,具体参考下表
		ClientConfig clientConfig = new ClientConfig(region);
		// 生成 cos 客户端
		client = new COSClient(cred, clientConfig);
  • ClientConfig参数配置表
成员名设置方法描述类型
region构造函数或set存储桶所在的区域Region
httpProtocolset请求所使用的协议,默认使用 HTTP 协议与 COS 交互HttpProtocol
signExpiredset请求签名的有效时间,默认为1小时int
connectionTimeoutset连接 COS 服务的超时时间,默认为30sint
socketTimeoutset客户端读取数据的超时时间,默认为30sint
httpProxyIpset代理服务器的 IPString
httpProxyPortset代理服务器的端口int

创建存储桶(Bucket)

		//存储桶名称,格式:BucketName-APPID
		// 注:APPID每个账户有固定的ID,可在账户中心查询自己的APPID
		String bucket = "examplebucket-1250000000"; 
		CreateBucketRequest createBucketRequest = new CreateBucketRequest(name);
		// 设置 bucket 的权限为 PublicRead(公有读私有写), 其他可选有私有读写, 公有读写
		 createBucketRequest.setCannedAcl(CannedAccessControlList.PublicRead);
		try{
			// 返回创建好的存储桶信息
		    Bucket bucketResult = client.createBucket(createBucketRequest);
		} catch (CosServiceException serverException) {
		    serverException.printStackTrace();
		} catch (CosClientException clientException) {
		    clientException.printStackTrace();
		}

查询存储桶

		// 核心就这一句话,然后遍历buckey获取每个bucket信息即可
		List<Bucket> list=client.listBuckets();

上传文件

		try {
		    // 指定要上传的文件
		    File localFile = new File("your_file_path");
		    // 指定要上传到的存储桶
		    String bucketName = "examplebucket-1252449330";
		    // 指定要上传到 COS 上对象键,即文件名称, 若文件名已存在则会覆盖
		    String key = "somekey";
		    PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
		    PutObjectResult putObjectResult = client.putObject(putObjectRequest);
		} catch (CosServiceException serverException) {
		    serverException.printStackTrace();
		} catch (CosClientException clientException) {
		    clientException.printStackTrace();
		}

按照官方文档上面的说法:使用此方法上传文件尽量控制在20M以内,最大不能超过5G,大文件可以采用分块上传或高级 API 接口上传。

下载文件

		try{
		    // 指定对象所在的存储桶
		    String bucketName = "examplebucket-1252449330";
		    // 指定对象在 COS 上的对象键,即文件名称
		    String key = "somekey";
		    // 指定要下载到的本地路径
		    File downFile = new File("D:\\file.txt");
		    GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
		    ObjectMetadata downObjectMeta = client.getObject(getObjectRequest, downFile);
		} catch (CosServiceException serverException) {
		    serverException.printStackTrace();
		} catch (CosClientException clientException) {
		    clientException.printStackTrace();
		}

查询Bucket内的对象

		try {
			// bucket名称
		    String bucket = "examplebucket-1250000000";
		    // 创建遍历请求
		    ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
		    // 设置 bucket 名称
		    listObjectsRequest.setBucketName(bucket);
		    // 设置对象前缀,可以此过滤部分对象
		    listObjectsRequest.setPrefix("");
		    // 设置最大遍历出多少个对象, 一次 listobject 最大支持1000
		    listObjectsRequest.setMaxKeys(1000);
		    listObjectsRequest.setDelimiter("/");
		    ObjectListing objectListing = cosClient.listObjects(listObjectsRequest);
		    for (COSObjectSummary cosObjectSummary : objectListing.getObjectSummaries()) {
		        // 对象的路径 key,即文件名
		        String key = cosObjectSummary.getKey();
		        // 对象的 etag
		        String etag = cosObjectSummary.getETag();
		        // 对象的长度
		        long fileSize = cosObjectSummary.getSize();
		        // 对象的存储类型
		        String storageClass = cosObjectSummary.getStorageClass();
		        System.out.println("key:" + key + "; etag:" + etag + "; fileSize:" + fileSize + "; storageClass:" + storageClass);
		    }
		} catch (CosServiceException serverException) {
		    serverException.printStackTrace();
		} catch (CosClientException clientException) {
		    clientException.printStackTrace();
		}

删除Bucket内的对象

		try {
		    // 指定对象所在的存储桶
		    String bucketName = "examplebucket-1250000000";
		    // 指定对象在 COS 上的对象键
		    String key = "somekey";
		    cosClient.deleteObject(bucketName, key);
		} catch (CosServiceException serverException) {
		    serverException.printStackTrace();
		} catch (CosClientException clientException) {
		    clientException.printStackTrace();
		}

关闭客户端对象

		// 关闭客户端(关闭后台线程)
		cosClient.shutdown();

错误码参考

错误码官方参考文档:错误码参考文档.

官方文档入口

腾讯COS官方文档

自写Demo下载

这是我测试的时候自己写的Demo,有兴趣的小伙伴可以下载参考,若有错误,欢迎指正,我的使用环境是Eclipse+JDK1.8。 百度网盘地址:Demo地址 提取码:1a5w


另外,有兴趣的小伙伴可以关注公众号【暴走的怪兽君】,常更新Java干货资讯,免费提供大量教程和工具下载。

转载自:https://juejin.cn/post/7124896932404658190
评论
请登录