前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >COS JavaSDK V4升级到V5版本

COS JavaSDK V4升级到V5版本

原创
作者头像
卓恒
发布2020-12-29 19:32:07
1.6K0
发布2020-12-29 19:32:07
举报

如果您细心对比过 JSON Java SDK 和 XML Java SDK 的文档,您会发现并不是一个简单的增量更新。XML Java SDK 在架构、可用性和安全性上有了非常大的提升,而且在易用性、健壮性和性能上也做了非常大的改进。如果您想要升级到 XML Java SDK,请参考下面的指引,完成 Java SDK 的升级工作。

功能对比

功能

XML Java SDK V5

JSON Java SDK V4

文件上传

支持本地文件、字节流、输入流上传默认覆盖上传智能判断上传模式:简单上传最大支持5GB分块上传最大支持48.82TB(50,000GB)

只支持本地文件上传可选择是否覆盖需要手动选择是简单还是分块上传简单上传最大支持20MB分块上传最大支持64GB

文件删除

支持批量删除

只支持单文件删除

存储桶基本操作

创建存储桶获取存储桶删除存储桶

不支持

存储桶 ACL操作

设置存储桶 ACL获取设置存储桶 ACL删除设置存储桶 ACL

不支持

存储桶生命周期

创建存储桶生命周期获取存储桶生命周期删除存储桶生命周期

不支持

目录操作

不单独提供接口

创建目录查询目录删除目录

用户如何确认SDK版本

用户在maven项目pom.xml 文件中查找:cos_api

V5 版本:5.x.x

<groupId>com.qcloud</groupId>

<artifactId>cos_api</artifactId>

<version>5.x.x</version>

V4 版本:4.x

<groupId>com.qcloud</groupId>

<artifactId>cos_api</artifactId>

<version>4.x</version>

COS V4和V5版本域名对比

新建bucket默认开启XML控制台权限,即V5版本,且V4控制台权限不开启,因此通过腾讯云控制台访问会看到如下:https://console.cloud.tencent.com/cos5/bucketxxx,域名信息只能看到V5版本域名格式。

COS V5版本域名

参照:https://cloud.tencent.com/document/product/436/6224

格式: <BucketName-APPID>.cos.region.myqcloud.com (region=地域简称)

COS V4版本域名

参照:https://cloud.tencent.com/document/product/436/7777

格式: <BucketName-APPID>.cosregion.myqcloud.com (region=地域简称)

支持地域和简称变化对比

XML SDK V5 的存储桶可用区域简称发生了变化,不同区域在 JSON SDK V4 和 XML SDK V5 中的对应关系请表:(注意V4地域“无”表示V4无法使用该地域,无法使用JSON SDK V4访问该地域的bucket)

地域

XML SDK V5地域简称

JSON SDK V4地域简称

北京一区(华北)

ap-beijing-1

tj

北京

ap-beijing

bj

上海(华东)

ap-shanghai

sh

广州(华南)

ap-guangzhou

gz

成都(西南)

ap-chengdu

cd

重庆

ap-chongqing

香港

ap-hongkong

hk

新加坡

ap-singapore

sgp

多伦多

na-toronto

ca

法兰克福

eu-frankfurt

ger

深圳金融

ap-shenzhen-fsi

上海金融

ap-shenzhen-fsi

北京金融

ap-shenzhen-fsi

南京

ap-nanjing

东京

ap-tokyo

孟买

ap-mumbai

首尔

ap-seoul

硅谷

na-siliconvalley

弗吉尼亚

na-ashburn

曼谷

ap-bangkok

莫斯科

eu-moscow

COS JavaSDK V4和V5文档

V4 SDK对应V4版本域名和地域简称;V5 SDK对应V5版本域名和地域简称,不支持交叉访问;COS V5 SDK版本和V4 SDK版本,官网提供了具体文档,详情可参照如下:

COS V5版本入口

https://cloud.tencent.com/document/product/436/10199

COS V4版本入口

https://cloud.tencent.com/document/product/436/6273

升级步骤

参照:https://cloud.tencent.com/document/product/436/31355

1、更新 Java SDK

XML Java SDK 发布在 maven 中央仓库,推荐您使用 maven 自动管理依赖方式引入。

在 maven 项目的 pom.xml 文件中添加如下依赖:

<dependency>

<groupId>com.qcloud</groupId>

<artifactId>cos_api</artifactId>

<version>5.x.x</version>

</dependency>

当然您也可以在 maven 中央仓库中直接下载对应版本的 jar 包,手动加入到您的项目当中。

2、更改存储桶名称和可用区域简称

XML Java SDK 的存储桶名称和可用区域简称与 JSON Java SDK 的不同,需要您进行相应的更改。

(1)存储桶 Bucket

V5存储桶名称,格式为:BucketName-APPID Eg:examplebucket-1250000000

V4存储桶名称,格式为:BucketName Eg:examplebucket

设置 Bucket,请参考以下示例代码:

代码语言:javascript
复制
// 存储桶名称,格式为:BucketName-APPID
String bucketName = "examplebucket-1250000000";

// 以下是向这个存储桶上传一个文件的示例
String key = "exampleobject";
File localFile = new File(localFilePath);
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
// 设置存储类型:标准存储(Standard), 低频存储(Standard_IA)和归档存储(ARCHIVE)。默认是标准存储(Standard)
putObjectRequest.setStorageClass(StorageClass.Standard_IA);

PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
// putobjectResult 会返回文件的 etag
String etag = putObjectResult.getETag();

(2)存储桶可用区域和简称Region

XML SDK 的存储桶可用区域和简称发生了变化,不同区域在 JSON SDK 和 XML SDK 中的对应关系请参照“支持地域和简称变化对比”:

在初始化COSClient的时候,将存储桶所在区域的简称设置到ClientConfig中:

代码语言:javascript
复制
ClientConfig clientConfig = new ClientConfig(new Region("ap-beijing-1"));
COSClient cosClient = new COSClient(cred, clientConfig);

3、更改 API

升级到 XML SDK 之后,一些操作的 API 发生了变化,请您根据实际需求进行相应的更改。同时我们做了封装让 SDK 更加易用,具体请参见我们的示例和 快速入门 文档。

API 主要有以下变化:

(1)没有单独的目录接口

在 XML SDK 中,不再提供单独的目录接口。对象存储中本身是没有文件夹或目录的概念的,对象存储不会因为上传对象project/text.txt而创建一个 project 文件夹。为了满足用户使用习惯,对象存储在控制台、COS browser 等图形化工具中,通过调用 GETBucket 接口,并指定 prefix 和 delimiter,模拟「文件夹」或「目录」的展示方式。

例如:您上传了四个对象 project/folder1/picture.jpg、project/folder2/text.txt、project/folder2/music.mp3、project/video.mp4。

在 Java SDK 中,您可以调用 listObjects 方法,指定 prefix 为project/和 delimiter 为/,调用返回对象的 getCommonPrefixes 方法, 获取到具有相同前缀的「目录」

代码语言:javascript
复制
String bucketName = "examplebucket-1250000000";
cosClient.putObject(bucketName, "project/folder1/picture.jpg", "content");
cosClient.putObject(bucketName, "project/folder2/text.txt", "content");
cosClient.putObject(bucketName, "project/folder2/music.mp3", "content");
cosClient.putObject(bucketName, "project/video.mp4", "content");

ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
listObjectsRequest.setBucketName(bucketName);
listObjectsRequest.setPrefix("project/");
listObjectsRequest.setDelimiter("/");
// 实际使用,您可以将 maxKeys 设为最大值 1000,以减少请求次数
listObjectsRequest.setMaxKeys(2);
String nextMarker = "";
for (; ; ) {
    listObjectsRequest.setMarker(nextMarker);
    ObjectListing objectListing = cosClient.listObjects(listObjectsRequest);
    // getCommonPrefixes + getObjectSummaries 返回条目数 <= maxKeys
    // 两次循环会输出 project/folder1/ 和 project/folder2/
    for (String prefix : objectListing.getCommonPrefixes()) {
        System.out.println(prefix);
    }
    // 两次循环会输出 project/video.mp4
    for (COSObjectSummary object : objectListing.getObjectSummaries()) {
        System.out.println(object.getKey());
    }
    // 判断是否还有条目
    if (!objectListing.isTruncated()) {
        break;
    }
    // 一次未获取完毕,以 nextMarker 作为下一次 listObjects 请求的 marker
    nextMarker = objectListing.getNextMarker();
}

(2)TransferManager

在 XML Java SDK 中,我们封装了上传、下载和复制操作,命名为TransferManager,优化了 API 设计和传输性能,建议您直接使用。

TransferManager的主要特性有:

  • 支持上传下载过程的暂停和恢复。
  • 支持根据文件大小智能选择简单上传还是分块上传,您可以设置该判断临界。
  • 支持任务状态的监听。

使用TransferManager上传的示例代码:

代码语言:javascript
复制
String key = "exampleobject";
File localFile = new File(localFilePath);
String bucketName = "examplebucket-1250000000";
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
// 返回一个异步结果 Upload, 可同步的调用 waitForUploadResult 等待 upload 结束, 成功返回 UploadResult, 失败抛出异常.
Upload upload = transferManager.upload(putObjectRequest);
Thread.sleep(1000);

// 暂停任务,获取 PersistableUpload
PersistableUpload persistableUpload = upload.pause();
//也可通过如下方式,获取PersistableUpload
// while(persistableUpload == null) {
//     persistableUpload = upload.getResumeableMultipartUploadId();
//     System.out.println(System.currentTimeMillis());
//     Thread.sleep(100);
// }
// 恢复上传
upload = transferManager.resumeUpload(persistableUpload);
// 等待上传任务完成
UploadResult uploadResult = upload.waitForUploadResult();
System.out.println(uploadResult.getETag());

(3)签名算法不同

通常您不需要手动计算签名,但如果您将 SDK 的签名返回给前端使用,请注意我们的签名算法发生了改变。签名不再区分单次和多次签名,而是通过设置签名的有效期来保证安全性。具体的算法请参见 XML 请求签名 文档

(4)新增 API

XML Java SDK 新增 API,您可根据需求进行调用。包括:

  • 存储桶的操作,如 createBucket、GetBucket(List Objects)、ListBuckets 等。
  • 存储桶 ACL 的操作,如 getBucketAcl、setBucketAcl 等。
  • 存储桶生命周期的操作,如 setBucketLifecycleConfiguration、getBucketLifecycleConfiguration、 deleteBucketLifecycleConfiguration 等。

了解更多请参见 Java SDK 快速入门 文档。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 功能对比
  • 用户如何确认SDK版本
    • V5 版本:5.x.x
      • V4 版本:4.x
      • COS V4和V5版本域名对比
        • COS V5版本域名
          • COS V4版本域名
          • 支持地域和简称变化对比
          • COS JavaSDK V4和V5文档
            • COS V5版本入口
              • COS V4版本入口
              • 升级步骤
                • 1、更新 Java SDK
                  • 2、更改存储桶名称和可用区域简称
                    • (1)存储桶 Bucket
                    • (2)存储桶可用区域和简称Region
                  • 3、更改 API
                    • (1)没有单独的目录接口
                    • (2)TransferManager
                    • (3)签名算法不同
                    • (4)新增 API
                相关产品与服务
                对象存储
                对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档