获取及更新文件元信息
更新时间:2022-10-08
文件元信息
设置文件元信息
文件元信息(Object Meta),是对用户在向BOS上传文件时,同时对文件进行的属性描述,主要分为分为两种:设置HTTP标准属性(HTTP Headers)和用户自定义的元信息。
- 设定Object的Http Header
BOS C++ SDK本质上是调用后台的HTTP接口,因此用户可以在上传文件时自定义Object的Http Header。常用的http header说明如下:
名称 | 描述 | 默认值 |
---|---|---|
Content-MD5 | 文件数据校验,设置后BOS会启用文件内容MD5校验,把您提供的MD5与文件的MD5比较,不一致会抛出错误 | 无 |
Content-Type | 文件的MIME,定义文件的类型及网页编码,决定浏览器将以什么形式、什么编码读取文件。如没有指,BOS则根据文件的扩展名自动生成,如文件没有扩展名则填默认值 | application/octet-stream |
Content-Disposition | 指示MIME用户代理如何显示附加的文件,打开或下载,及文件名称 | 无 |
Content-Length | 上传的文件的长度,超过流/文件的长度会截断,不足为实际值 | 流/文件时间长度 |
Expires | 缓存过期时间 | 无 |
Cache-Control | 指定该Object被下载时的网页的缓存行为 | 无 |
参考代码如下:
...
// 初始化meta
ObjectMetaData meta;
// 设置ContentType
meta.set_content_type("application/json");
// 设置cache-control
meta.set_cache_control("no-cache");
// 设置x-bce-storage-class
meta.set_storage_class("STANDARD");
ret = client.upload_file(bucketName, objectKey, content, meta);
...
- 用户自定义元信息
BOS支持用户自定义元数据来对Object进行描述。如下代码所示:
// 设置自定义元数据name的值为my-data
meta.set_user_meta("name", "my-data");
// 上传Object
ret = client.upload_file(bucketName, objectKey, file_name, meta);
提示:
- 在上面代码中,用户自定义了一个名字为”name”,值为”my-data”的元数据
- 当用户下载此Object的时候,此元数据也可以一并得到
- 一个Object可以有多个类似的参数,但所有的User Meta总大小不能超过2KB
获取Object的存储类型
Object的storage class属性分为STANDARD
(标准存储), STANDARD_IA
(低频存储)和COLD
(冷存储),通过如下代码可以实现:
int getObjectStorageClass(){
HeadObjectRequest request(bucketName, objectKey);
HeadObjectResponse response;
int ret = client.head_object(request, &response);
if (ret != 0) {
return ret;
}
ObjectMetaData& meta = response.meta();
std::string storageClass = meta.storage_class();
std::cout << storageClass << std::endl;
return 0;
}
只获取ObjectMetaData
通过 head_object 方法可以只获取ObjectMetaData而不获取Object的实体。
ObjectMetaData
解析类中可供调用的参数有:
参数 | 说明 |
---|---|
content_type | Object的类型 |
content_length | Object的大小 |
content_md5 | Object的MD5 |
etag | Object的HTTP协议实体标签 |
storage_class | Object的存储类型 |
user_meta | 如果在PutObject指定了userMetadata自定义meta,则返回此项 |
expires | 下载Object时的缓存失效时间 |
content_disposition | 设置浏览器是否下载,可取值为inline、attachment; filename="download.txt" |
cache_control | 下载Object的Cache设置,常见的可取值为private、no-cache、max-age、must-revalidate |
content_range | 有range的情况下返回Object的数据范围 |
获取及更新文件元信息
文件元信息(Object Metadata),是对用户上传BOS的文件的属性描述,分为两种:HTTP标准属性(HTTP Headers)和User Meta(用户自定义元信息)。
void getObjectMeta(Client& client, const std::string& bucketName, const std::string& objectKey, ObjectMetaData* objectMetaData) {
HeadObjectRequest request(bucketName, objectKey);
HeadObjectResponse rsponse;
request.set_meta(newObjectMetaData);
int ret = client.head_object(request, &rsponse);
if (ret != 0) {
return;
}
objectMetaData = &rsponse.meta();
}
修改文件元信息
BOS修改Object的Metadata通过拷贝Object实现。即拷贝Object的时候,把目的Bucket设置为源Bucket,目的Object设置为源Object,并设置新的Metadata,通过拷贝自身实现修改Metadata的目的。如果不设置新的Metadata,则报错。
void setObjectMeta(Client& client, const std::string& bucketName, const std::string& objectKey, ObjectMetaData* newObjectMetaData) {
CopyObjectRequest request(bucketName, objectKey, bucketName, objectKey);
// 设置新的ObjectMetaData
request.set_meta(newObjectMetaData);
// 拷贝Object
CopyObjectResponse copyObjectResponse;
int ret = client.copy_object(request, ©ObjectResponse);
if (ret != 0) {
return;
}
// 打印结果
std::cout << "ETag: " << copyObjectResponse.etag() << " LastModified: " << copyObjectResponse.last_modified() << std::endl;
}