对象元信息是对象的属性描述,包括 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>