对象元信息是对象的属性描述,包括 HTTP 标准属性(HTTP Header)和用户自定义元数据(User Meta)两种。
通过 TOS Browser SDK 可以添加和修改已经上传对象的元数据信息。TOS 支持携带以下请求头来修改对象元数据,在下载对象或者 HEAD 对象时,这些值会设置到 HTTP 头域中返回给客户端。请求头如下所示:
名称 | 说明 |
---|---|
Content-Type | 对象类型。 |
Cache-Control | 指定该对象被下载时网页的缓存行为。 |
Expires | RFC2616 中定义的缓存失效时间。 |
Content-Disposition | 对象被下载时的名称。 |
Content-Encoding | 对象被下载时的内容编码类型。 |
Content-Language | 对象被下载时的内容语言格式。 |
x-tos-meta-* | 使用 SDK 设置 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<button id="upload">上传</button>
<input id="file" type="file" />
<!-- 导入 SDK 文件 -->
<script src="https://tos-public.volccdn.com/obj/volc-tos-public/@volcengine/tos-sdk@latest/browser/tos.umd.production.min.js"></script>
<script type="text/javascript">
const client = new TOS({
// yourRegion 填写 Bucket 所在地域。以华北2(北京)为例,yourRegion 填写为 cn-beijing。
region: yourRegion,
// 填写 endpoint 名称。
endpoint: yourEndpoint,
// 从 STS 服务获取的临时访问密钥(AccessKey ID 和 AccessKey Secret)。
accessKeyId: yourAccessKey,
accessKeySecret: yourSecretKey,
// 从 STS 服务获取的安全令牌(SecurityToken)。
stsToken: yourSecurityToken,
// 填写 Bucket 名称。
bucket: examplebucket,
});
const objectName = 'exampledir/putObjectobject.txt';
const upload = document.getElementById('upload');
upload.addEventListener('click', async () => {
// 从输入框获取 file 对象,例如 <input type="file" id="file" />。
const data = document.getElementById('file').files[0];
console.log('data', data);
try {
const result = await client.uploadFile({
key: objectName,
file: data,
headers: {
// 设置为普通文本
'content-type': 'text/plain',
// 过期时间为 2028 年
expires: new Date('2028/01/01'),
},
});
console.log(result);
// 查询刚刚上传对象的信息
const headobject = await client.headObject({
bucket: examplebucket,
key: objectName,
});
// object info
console.log('object info:', headobject.data);
} catch (e) {
console.log(e);
}
});
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<button id="upload">上传</button>
<input id="file" type="file" />
<!-- 导入 SDK 文件 -->
<script src="https://tos-public.volccdn.com/obj/volc-tos-public/@volcengine/tos-sdk@latest/browser/tos.umd.production.min.js"></script>
<script type="text/javascript">
const client = new TOS({
// yourRegion 填写 Bucket 所在地域。以华北2(北京)为例,yourRegion 填写为 cn-beijing。
region: yourRegion,
// 填写 endpoint 名称。
endpoint: yourEndpoint,
// 从 STS 服务获取的临时访问密钥(AccessKey ID 和 AccessKey Secret)。
accessKeyId: yourAccessKey,
accessKeySecret: yourSecretKey,
// 从 STS 服务获取的安全令牌(SecurityToken)。
stsToken: yourSecurityToken,
// 填写 Bucket 名称。
bucket: bucketName,
});
const objectName = 'exampledir/putObjectobject.txt';
const main = async () => {
// 查询对象的元信息
const { data } = await client.headObject({
bucket: bucketName,
key: objectName,
});
// object info
console.log('object info:', data);
console.log('object content-type:', data['content-type']);
console.log('object expires:', data.expires);
await client.setObjectMeta({
bucket: bucketName,
key: objectName,
headers: {
'Content-Language': 'zh-cn',
'Content-Type': 'text/html',
Expires: new Date('2030'),
},
});
// 查询对象的元信息
const { data: newData } = await client.headObject({
bucket: bucketName,
key: objectName,
});
// object info
console.log('object info:', newData);
console.log('object content-type:', newData['content-type']);
console.log('object expires:', newData.expires);
console.log('object content-language:', newData['content-language']);
};
main();
</script>
</body>
</html>
注意
获取对象元数据前,您必须具有 tos:GetObject
权限,详细信息,请参见 IAM 策略概述。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<button id="upload">上传</button>
<input id="file" type="file" />
<!-- 导入 SDK 文件 -->
<script src="https://tos-public.volccdn.com/obj/volc-tos-public/@volcengine/tos-sdk@latest/browser/tos.umd.production.min.js"></script>
<script src="./const.js"></script>
<script type="text/javascript">
const client = new TOS({
// yourRegion 填写 Bucket 所在地域。以华北2(北京)为例,yourRegion 填写为 cn-beijing。
region: yourRegion,
// 填写 endpoint 名称。
endpoint: yourEndpoint,
// 从 STS 服务获取的临时访问密钥(AccessKey ID 和 AccessKey Secret)。
accessKeyId: yourAccessKey,
accessKeySecret: yourSecretKey,
// 从 STS 服务获取的安全令牌(SecurityToken)。
stsToken: yourSecurityToken,
// 填写 Bucket 名称。
bucket: bucketName,
});
const objectName = 'exampledir/putObjectobject.txt';
const main = async () => {
// 查询对象的元信息
const { data } = await client.headObject({
bucket: bucketName,
key: objectName,
});
// object info
console.log('object info:', data);
};
main();
</script>
</body>
</html>