管理文件元数据(C++ SDK V2)

更新时间:
复制为 MD 格式

文件元数据(Object Metadata)包括文件的大小、类型、修改时间等信息。本文介绍如何使用 OSS C++ SDK V2 获取文件元数据。

注意事项

  • 运行示例代码前,请将代码中的 <region> 替换为实际的地域,如 cn-hangzhou

  • 本文示例代码使用环境变量获取访问凭证。

  • 要获取文件元数据,您必须拥有 oss:GetObject 权限。

示例代码

获取完整元数据(HeadObject)

以下代码演示如何使用 HeadObject 获取文件的完整元数据信息:

#include <iostream>
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"

namespace oss = alibabacloud::oss2;

int main() {
    auto conf = oss::ClientConfiguration::loadDefault();
    conf.region = "<region>";
    conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();

    oss::OSSClient client(conf);

    auto outcome = client.headObject(
        oss::models::HeadObjectRequest()
            .setBucket("examplebucket")
            .setKey("exampleobject.txt"));

    if (!outcome.has_value()) {
        auto& e = outcome.error();
        std::cerr << "获取文件元数据失败"
                  << ", code: " << e.getCode()
                  << ", message: " << e.getMessage()
                  << ", requestId: " << e.getRequestId() << std::endl;
        return 1;
    }

    auto& result = outcome.value();
    std::cout << "文件元数据信息:"
              << "\n  文件大小 (ContentLength): " << result.getContentLength()
              << "\n  文件类型 (ContentType): " << result.getContentType()
              << "\n  ETag: " << result.getETag()
              << "\n  最后修改时间 (LastModified): " << result.getLastModified()
              << "\n  存储类型 (StorageClass): " << result.getStorageClass() << std::endl;
    return 0;
}
          

获取简化元数据(GetObjectMeta)

以下代码演示如何使用 GetObjectMeta 获取文件的简化元数据信息。相比 HeadObject,GetObjectMeta 返回的元数据更少,但性能更好:

#include <iostream>
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"

namespace oss = alibabacloud::oss2;

int main() {
    auto conf = oss::ClientConfiguration::loadDefault();
    conf.region = "<region>";
    conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();

    oss::OSSClient client(conf);

    auto outcome = client.getObjectMeta(
        oss::models::GetObjectMetaRequest()
            .setBucket("examplebucket")
            .setKey("exampleobject.txt"));

    if (!outcome.has_value()) {
        auto& e = outcome.error();
        std::cerr << "获取文件简化元数据失败"
                  << ", code: " << e.getCode()
                  << ", message: " << e.getMessage()
                  << ", requestId: " << e.getRequestId() << std::endl;
        return 1;
    }

    auto& result = outcome.value();
    std::cout << "文件简化元数据信息:"
              << "\n  文件大小 (ContentLength): " << result.getContentLength()
              << "\n  ETag: " << result.getETag()
              << "\n  最后修改时间 (LastModified): " << result.getLastModified() << std::endl;
    return 0;
}
          

相关文档

  • 关于获取文件元数据的完整示例代码,请参见HeadObject.cpp

  • 关于获取文件元数据摘要的完整示例代码,请参见GetObjectMeta.cpp