本文介绍列举分片上传任务的注意事项及示例代码。
tos:ListBucketMultipartUploads
权限,具体操作请参见 IAM 策略概述。参数 | 描述 |
---|---|
delimiter | 对对象名称进行分组的字符。 |
encodingType | 对返回的内容进行编码并指定编码的类型。 |
maxUploads | 返回分片上传任务的最大数量。默认为 1000。 |
prefix | 用于指定列举返回对象的前缀名称。 |
keyMarker | 列举分片上传任务的起始位置。设定从该值之后按字母排序返回对象列表。通常为上次请求返回的 nextMarker 值。 |
uploadIdMarker | 与 keyMarker 配合使用,设定从该值之后按字典排序返回分片上传任务列表。从上次列举结果中 nextVersionIdMarker 获取。 |
以下代码用于列举指定桶中 10 个未合并的分片上传任务。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); // 列举已上传分片,默认列举1000个分片 ListMultipartUploadsV2Input input(bucketName); // 设置返回分片上传任务的最大数量 input.setMaxUploads(10); auto output = client.listMultipartUploads(input); if (!output.isSuccess()) { // 异常处理 std::cout << "ListMultipartUploads failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "ListMultipartUploads success." << std::endl; for (const auto& part : output.result().getUploads()) { std::cout << "part"<< ",key:" << part.getKey() << ",uploadId:" << part.getUploadId() << ",storageClasss:" << part.getStringFormatStorageClass() << ",initiated time:" << part.getStringFormatInitiated() << std::endl; } // 释放网络等资源 CloseClient(); return 0; }
以下代码用于列举指定存储桶指定前缀下的所有未合并的分片上传任务。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 填写列举的文件前缀 Prefix。 std::string prefix = "yourkeyPrefix"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); // 列举已上传分片 ListMultipartUploadsV2Input input(bucketName); // 设置列举前缀 input.setPrefix(prefix); // 一次最多列举100条 input.setMaxUploads(100); // isTruncated用于控制是否列举完全,nextKeyMarker用于递归列举 bool isTruncated = true; std::string nextKeyMarker = ""; while(isTruncated){ input.setKeyMarker(nextKeyMarker); auto output = client.listMultipartUploads(input); if (!output.isSuccess()) { // 异常处理 std::cout << "ListMultipartUploads failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } nextKeyMarker = output.result().getNextKeyMarker(); isTruncated = output.result().isTruncated(); std::cout << "ListMultipartUploads success." << std::endl; for (const auto& part : output.result().getUploads()) { std::cout << "part"<< ",key:" << part.getKey() << ",uploadId:" << part.getUploadId() << ",storageClasss:" << part.getStringFormatStorageClass() << ",initiated time:" << part.getStringFormatInitiated() << std::endl; } } // 释放网络等资源 CloseClient(); return 0; }
以下代码用于列举制定存储桶未合并的所有分片上传任务。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); // 列举已上传分片 ListMultipartUploadsV2Input input(bucketName); // 一次最多列举100条 input.setMaxUploads(100); // isTruncated用于控制是否列举完全,nextKeyMarker用于递归列举 bool isTruncated = true; std::string nextKeyMarker = ""; while(isTruncated){ input.setKeyMarker(nextKeyMarker); auto output = client.listMultipartUploads(input); if (!output.isSuccess()) { // 异常处理 std::cout << "ListMultipartUploads failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } nextKeyMarker = output.result().getNextKeyMarker(); isTruncated = output.result().isTruncated(); std::cout << "ListMultipartUploads success." << std::endl; for (const auto& part : output.result().getUploads()) { std::cout << "part"<< ",key:" << part.getKey() << ",uploadId:" << part.getUploadId() << ",storageClasss:" << part.getStringFormatStorageClass() << ",initiated time:" << part.getStringFormatInitiated() << std::endl; } } // 释放网络等资源 CloseClient(); return 0; }
TOS 只有对象的概念, 可通过创建一个大小为 0 并且以斜线 /
结尾的对象, 模拟目录的功能。
通过 delimiter
和 prefix
两个参数可以模拟目录的功能:
delimiter
为 /
同时设置 prefix
为空, 可返回根目录下的对象和子目录信息。delimiter
为 /
同时设置 prefix
为子目录(subfiledir
), 可返回子目录的对象和次级目录。以下代码用于按目录递归列举桶 examplebucket 中未合并的分片上传任务。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); // 列举已上传分片 ListMultipartUploadsV2Input input(bucketName); // 设置分割符为"/" input.setDelimiter("/"); // 一次最多列举100条 input.setMaxUploads(100); auto output = client.listMultipartUploads(input); if (!output.isSuccess()) { // 异常处理 std::cout << "ListMultipartUploads failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "ListMultipartUploads success." << std::endl; for (const auto& part : output.result().getUploads()) { std::cout << "part"<< ",key:" << part.getKey() << ",uploadId:" << part.getUploadId() << ",storageClasss:" << part.getStringFormatStorageClass() << ",initiated time:" << part.getStringFormatInitiated() << std::endl; } for (const auto& prefix : output.result().getCommonPrefixes()) { std::cout << "Sub Dir:"<< prefix.getPrefix() << std::endl; } // 释放网络等资源 CloseClient(); return 0; }
关于列举对象分片的 API 文档,请参见 ListMultipartUploads。