You need to enable JavaScript to run this app.
文档中心
对象存储

对象存储

复制全文
下载 pdf
管理对象
管理对象元数据(Java SDK)
复制全文
下载 pdf
管理对象元数据(Java SDK)

对象元数据是对象的属性描述,包括 HTTP 标准属性(HTTP Header)和用户自定义元数据(User Meta)两种。TOS Java SDK 支持对单个对象设置元数据,以及查看对象元数据信息。

设置对象元数据

注意

要设置对象元数据,您的账号必须具备 tos:PutObject 权限,具体操作请参见权限配置指南

您可以在上传对象时直接设置对象元数据,也可以在上传完成后,通过 TOS Java SDK 的 setObjectMeta 接口对已存在的对象设置元数据。

上传对象时设置对象元数据

  • 在普通上传时设置对象元数据,请参见普通上传
  • 在追加上传时设置对象元数据,请参见追加上传
  • 在分片上传时设置对象元数据,请参见分片上传
  • 在拷贝对象时设置对象元数据,请参见普通拷贝
  • 在分片拷贝对象时设置对象元数据,请参见分片拷贝

通过 setObjectMeta 设置

TOS Java SDK 的 setObjectMeta 接口支持设置对象的 HTTP Header 和自定义元数据 Header。

注意

以下代码展示如何进行设置,所有的参数值均仅供参考,请根据实际业务需要进行设置。

import com.volcengine.tos.TOSV2;
import com.volcengine.tos.TOSV2ClientBuilder;
import com.volcengine.tos.TosClientException;
import com.volcengine.tos.TosServerException;
import com.volcengine.tos.model.object.ObjectMetaRequestOptions;
import com.volcengine.tos.model.object.SetObjectMetaInput;
import com.volcengine.tos.model.object.SetObjectMetaOutput;

import java.util.HashMap;
import java.util.Map;

public class SetObjectMetaExample {
    public static void main(String[] args) {
        String endpoint = "your endpoint";
        String region = "your region";
        String accessKey = System.getenv("TOS_ACCESS_KEY");
        String secretKey = System.getenv("TOS_SECRET_KEY");

        String bucketName = "bucket-example";
        // 对象名,需保证对象已存在
        String objectKey = "example_dir/example_object.txt";

        TOSV2 tos = new TOSV2ClientBuilder().build(region, endpoint, accessKey, secretKey);

        try{
            // 以下所有设置的参数值均为可选参数,仅供参考,请根据业务实际需要进行设置
            ObjectMetaRequestOptions options = new ObjectMetaRequestOptions();

            // 设置 HTTP Header。
            // 指定上传的内容类型。内容类型决定浏览器将以什么形式读取文件。
            // SDK 会默认根据 objectKey 的后缀扩展名识别设置,如果没有扩展名则设置默认值 binary/octet-stream。
            options.setContentType("text/plain");
            // 设置内容被下载时的名称。
            options.setContentDisposition("attachment; filename=\"DownloadFileName\"");
            // 设置内容被下载时网页的缓存行为。
            options.setCacheControl("no-cache");

            // 设置自定义 Header。
            Map<String, String> customMeta = new HashMap<>();
            customMeta.put("userCustomKey", "userCustomValue");
            options.setCustomMetadata(customMeta);

            SetObjectMetaInput input = new SetObjectMetaInput().setBucket(bucketName).setKey(objectKey).setOptions(options);
            SetObjectMetaOutput output = tos.setObjectMeta(input);
            System.out.println("setObjectMeta succeed");
        } catch (TosClientException e) {
            // 操作失败,捕获客户端异常,一般情况是请求参数错误,此时请求并未发送
            System.out.println("setObjectMeta failed");
            System.out.println("Message: " + e.getMessage());
            if (e.getCause() != null) {
                e.getCause().printStackTrace();
            }
        } catch (TosServerException e) {
            // 操作失败,捕获服务端异常,可以获取到从服务端返回的详细错误信息
            System.out.println("setObjectMeta failed");
            System.out.println("StatusCode: " + e.getStatusCode());
            System.out.println("Code: " + e.getCode());
            System.out.println("Message: " + e.getMessage());
            System.out.println("RequestID: " + e.getRequestID());
        } catch (Throwable t) {
            // 作为兜底捕获其他异常,一般不会执行到这里
            System.out.println("setObjectMeta failed");
            System.out.println("unexpected exception, message: " + t.getMessage());
        }
    }
}

相关文档

关于设置对象元数据的 API 接口,请参见 SetObjectMeta

获取对象元数据

您可以通过 Java SDK 的 headObject 接口获取对象元信息。

注意

要获取对象元数据,您的账号必须具备 tos:GetObject 权限,具体操作请参见权限配置指南

示例代码

以下代码展示如何获取对象的元数据。

import com.volcengine.tos.TOSV2;
import com.volcengine.tos.TOSV2ClientBuilder;
import com.volcengine.tos.TosClientException;
import com.volcengine.tos.TosServerException;
import com.volcengine.tos.model.object.HeadObjectV2Input;
import com.volcengine.tos.model.object.HeadObjectV2Output;

import java.util.Map;

public class HeadObjectExample {
    public static void main(String[] args) {
        String endpoint = "your endpoint";
        String region = "your region";
        String accessKey = System.getenv("TOS_ACCESS_KEY");
        String secretKey = System.getenv("TOS_SECRET_KEY");

        String bucketName = "bucket-example";
        String objectKey = "example_dir/example_object.txt";

        TOSV2 tos = new TOSV2ClientBuilder().build(region, endpoint, accessKey, secretKey);

        try{
            HeadObjectV2Input input = new HeadObjectV2Input().setBucket(bucketName).setKey(objectKey);
            HeadObjectV2Output output = tos.headObject(input);
            System.out.println("headObject succeed.");
            System.out.println("object's contentType is " + output.getContentType());
            System.out.println("object's etag is " + output.getEtag());
            System.out.println("object's storageClass is " + output.getStorageClass());
            System.out.println("object's contentDisposition is " + output.getContentDisposition());
            System.out.println("object's lastModified is " + output.getLastModified());
            System.out.println("object's cacheControl is " + output.getCacheControl());
            System.out.println("object's contentLength is " + output.getContentLength());
            System.out.println("object's expires is " + output.getExpires());
            System.out.println("object's contentEncoding is " + output.getContentEncoding());
            System.out.println("object's contentLanguage is " + output.getContentLanguage());
            // 如果桶开启了多版本,getVersionID 会有值,默认为对象的最新版本
            System.out.println("object's version id is " + output.getVersionID());
            if (output.getCustomMetadata() != null && output.getCustomMetadata().size() > 0) {
                System.out.println("object has custom meta data.");
                for (Map.Entry<String, String> custom : output.getCustomMetadata().entrySet()) {
                    System.out.println("object custom meta data key is " + custom.getKey() + ", value is " + custom.getValue());
                }
            }
        } catch (TosClientException e) {
            // 操作失败,捕获客户端异常,一般情况是请求参数错误,此时请求并未发送
            System.out.println("headObject failed");
            System.out.println("Message: " + e.getMessage());
            if (e.getCause() != null) {
                e.getCause().printStackTrace();
            }
        } catch (TosServerException e) {
            // 操作失败,捕获服务端异常,可以获取到从服务端返回的详细错误信息
            System.out.println("headObject failed");
            System.out.println("StatusCode: " + e.getStatusCode());
            System.out.println("RequestID: " + e.getRequestID());
        } catch (Throwable t) {
            // 作为兜底捕获其他异常,一般不会执行到这里
            System.out.println("headObject failed");
            System.out.println("unexpected exception, message: " + t.getMessage());
        }
    }
}

相关文档

关于设置对象元数据的 API 接口,请参见 HeadObject

最近更新时间:2024.02.04 18:30:54
这个页面对您有帮助吗?
有用
有用
无用
无用