文档中心>对象存储

软链接概述

最近更新时间:2024-11-15 17:56:42

我的收藏

什么是软链接

软链接(Symlink)类似于快捷方式。在同一个存储桶内,对于一个对象,仅需要存储一份真实数据(Target Object,源文件),在存储桶其余位置可以创建该对象的软链接,用户可以通过软链接访问对象。
实际上,软链接是一种特殊的 Standard 类型的对象。软链接本身具有独立的名称、元数据、ACL,不必与源文件完全一致;但用户对软链接所执行的只读请求(包括下载对象 GET Object 和获取元数据 HEAD Object)将返回源文件的内容。

使用场景

软链接就像快捷方式一样,用于帮助用户快速访问经常使用的对象。设置软链接后,您可以通过软链接文件快速打开源文件。
通过软链接,您可以对源文件进行以下只读操作:
GET Object:通过软链接的对象键,下载源文件。
HEAD Object:通过软链接的对象键,获取源文件的元数据。

软链接的特性

基本特性

软链接和源文件(Target Object)必须位于同一个存储桶中
软链接实际上是一个特殊的 Standard 类型的文件,文件内容就是源文件的存储路径,例如/123/myphoto.jpeg,这里的存储路径不包括存储桶的部分。
软链接的文件大小一般很小,主要由源文件真实存储路径的长度决定,和源文件的实际大小无关。
软链接拥有自己独立的元数据(例如 Content-Type、Etag、Last-Modified 等,其他参数可参见 对象元数据)。其中,
Content-Type 的默认值是根据真实对象的文件后缀生成的,若源文件不包含后缀,则默认是软链接的 Content-Type。
Etag 是软链接文件本身的 Etag,反映了软链接存储的源文件路径的MD5值。
Last-Modified 表示软链接的最后修改时间,与源文件的修改时间无关。
对象信息
描述
是否一定与真实对象一致
举例
文件内容(Object Content)
源文件的存储路径,不包含存储桶路径的部分
/123/myphoto.jpeg
/ppp.txt
文件大小(Size)
软链接的大小,一般是一个很小的值,和源文件存储路径的长度有关,和源文件的大小无关
9B
Etag
软链接文件本身的 Etag,反映了软链接存储的源文件路径的 MD5值
db5570bf61464b46e2bde31ed61a7dc6
Content-Type
此项的默认值是根据源文件的文件名后缀生成的
image/jpeg
Last-Modified
软链接的最后修改时间,独立于真实对象
2021-08-20 133017
ACL
需要为软链接单独设置权限,独立于源文件。
注意:
软链接拥有自己独立的 ACL,通过软链接下载文件,会经过2次鉴权,一次是软链接鉴权,一次是源文件鉴权,任意一次鉴权不通过,都会拒绝请求。
private
标签
需要为软链接单独设置标签,独立于源文件
symlinktag:value1
versionid
软链接支持版本控制,独立于源文件
MTg0NDUxMTU4NDEzOTgwNjU5MTk
CRC64
软链接不需要 CRC64,如果用户需要计算,实际计算的是软链接文件的 CRC64
-

版本控制

软链接支持 版本控制,并独立于源文件。
未开启版本控制时,当软链接和普通文件重名,或软链接和软链接重名时,会进行覆盖。
开启版本控制后,创建重名软链接或上传重名对象时,会增加一个新的版本。

生命周期

软链接的 生命周期 独立于源文件,由于软链接只能是 Standard 类型,软链接不支持沉降操作。
当您为源文件配置生命周期沉降/删除时,软链接不会被同时沉降/删除。
当您为软链接配置生命周期删除时,COS 会根据软链接的最后上传时间(Last-Modified)进行删除,只会删除软链接文件本身,而不会删除源文件。

对象权限

软链接具有自己独立的 权限(ACL),当使用软链接时,需要在 CAM 为用户配置相应的使用软链接文件的权限。
使用软链接下载文件时,需要保证用户同时具有软链接和源文件的使用权限。这是因为,当用户发起通过软链接下载文件的请求时,会经过2次鉴权,一次是软链接鉴权,一次是源文件鉴权,任意一次鉴权不通过,都会拒绝请求。

对象复制

软链接支持复制操作,用户可以通过 PUT Object - Copy 复制软链接;配置了 存储桶复制 后,软链接文件也会被复制。

清单

软链接本质上是一个独立的对象,在 清单 中软链接和源文件会表现为不同的、各自独立的对象。

日志

软链接具有单独的日志记录,这个日志只保存作用于软链接的访问记录,直接作用于源文件的请求不会被记录。

使用方法

创建软链接(PUT Symlink)

您可以通过 PUT Symlink 接口创建与源文件位于同一存储桶的软链接。
发送请求时,必须携带 x-cos-symlink-target 头部标明源文件的存储路径。
软链接只能为标准存储类型,创建软链接时,x-cos-storage-class 只支持填写标准类型和标准类型(多 AZ)。默认情况下,存储为标准类型。
创建软链接时源文件路径只能是当前版本,不支持携带版本号。
创建软链接时,不检查源文件是否存在、以及访问权限的情况,只会根据您的请求将目标文件的路径保存到软链接文件的元数据;因此,您也可以对软链接本身再创建软链接。
当源文件路径不存在、无法访问、或实际为一个软链接时,通过软链接对象键发起的 GET Object 和 HEAD Object 请求会报错。

请求

请求示例
PUT /SymlinkName?symlink HTTP/1.1
Host: <BucketName-APPID>.cos.<Region>.myqcloud.com
Date: GMT Date
Authorization: Auth String
x-cos-symlink-target: TargetObjectName
请求参数
此接口无请求参数。
请求头
此接口除使用公共请求头部外,还支持以下请求头部,了解公共请求头部详情请参见 公共请求头部 文档。
名称
描述
类型
是否必选
x-cos-symlink-target
真实对象的存储路径
string
此外,创建软链接时,可以同时通过请求头部来设置软链接的访问权限,具体请求头见 PUT Object acl
请求体
此接口无请求体。

响应

响应头
此接口除返回公共响应头部外,还返回以下响应头部,了解公共响应头部详情请参见 公共响应头部 文档。
名称
描述
类型
x-cos-storage-class
对象存储类型,由于软链接只能存储为 STANDARD(或者 MAZ_STANDARD),只会返回 STANDARD(或者 MAZ_STANDARD)
string
响应体
此接口无响应体。
响应示例
HTTP/1.1 200 OK
Content-Length: 0
Connection: keep-alive
Date: Fri, 10 Apr 2020 09:35:05 GMT
ETag: "ee8de918d05640145b18f70f4c3aa602"
Server: tencent-cos
x-cos-request-id: NWU5MDNkYzlfNjRiODJhMDlfMzFmYzhfMTFm****
x-cos-storage-class: STANDARD

获取软链接本身(GET Symlink)

您可以通过 GET Symlink 接口获取软链接文件本身。

请求

不带版本号的请求
GET /SymlinkName?symlink HTTP/1.1
Host: <BucketName-APPID>.cos.<Region>.myqcloud.com
Date: GMT Date
Authorization: Auth String
带版本号的请求
GET /SymlinkName?symlink&versionId=CADSGRWGSDV******* HTTP/1.1
Host: <BucketName-APPID>.cos.<Region>.myqcloud.com
Date: GMT Date
Authorization: Auth String
请求参数
此接口无请求参数。
请求头
此接口仅使用公共请求头部,详情请参见 公共请求头部 文档。
请求体
此接口无请求体。

响应

响应头
此接口除返回公共响应头部外,还返回以下响应头部,了解公共响应头部详情请参见 公共响应头部 文档。
名称
描述
类型
x-cos-symlink-target
Target Object 的存储路径
string
响应体
此接口响应体为空。
响应示例
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 0
Connection: keep-alive
Date: Fri, 10 Apr 2020 09:35:05 GMT
Last-Modified: Fri, 24 Feb 2012 06:07:48 GMT
ETag: "ee8de918d05640145b18f70f4c3aa602"
Server: tencent-cos
x-cos-hash-crc64ecma: 16749565679157681890
x-cos-request-id: NWU5MDNkYzlfNjRiODJhMDlfMzFmYzhfMTFm****
x-cos-symlink-target: TargetObjectName

删除软链接(DELETE Object)

当您调用 DELETE Object 接口,对象键是软链接时,删除的是软链接本身,不会删除源文件。

请求

请求参数
此接口无请求参数。
请求头
此接口仅使用公共请求头部,详情请参见 公共请求头部 文档。
请求体
此接口无请求体。
请求示例
DELETE /SymlinkName HTTP/1.1
Host: <BucketName-APPID>.cos.<Region>.myqcloud.com
Date: GMT Date
Authorization: Auth String

响应

响应头
此接口仅返回公共响应头部,详情请参见 公共响应头部 文档。
响应体
此接口无响应体。
响应示例
HTTP/1.1 204 No Content
Connection: keep-alive
Date: Wed, 08 Sep 2021 07:01:43 GMT
Server: tencent-cos
x-cos-request-id: NjEzODVmZDdfMzBkMDM4MGJfMTRlMjJfMThj****

通过软链接下载真实对象(GET Object)

可以通过 GET Object 接口,通过软链接下载真实对象。

请求

请求参数
此接口无请求参数。
请求头
此接口仅使用公共请求头部,详情请参见 公共请求头部 文档。
请求体
此接口无请求体。
请求示例
GET /SymlinkName HTTP/1.1
Host: <BucketName-APPID>.cos.<Region>.myqcloud.com
Date: GMT Date
Authorization: Auth String

响应

响应头
此接口仅返回公共响应头部,详情请参见 公共响应头部 文档。
响应体
此接口请求的响应体为对象(文件)内容。
响应示例
HTTP/1.1 200 OK
Content-Type: application/x-tar
Content-Length: 6
Connection: keep-alive
Accept-Ranges: bytes
Date: Wed, 08 Sep 2021 03:18:52 GMT
ETag: "4a1dbd5124d2ff06740c55ea3ec89f22"
Last-Modified: Wed, 08 Sep 2021 03:17:13 GMT
Server: tencent-cos
x-cos-hash-crc64ecma: 4071074640841670626
x-cos-request-id: NjEzODJiOWNfNWJiODJhMDlfMTJmMGFfMTRhZGZ****

通过软链接获取源文件的元数据(HEAD Object)

可以通过 HEAD Object 接口,指定对象键为软链接文件名,获取源文件的元数据。

请求

请求示例
HEAD /SymlinkName HTTP/1.1
Host: <BucketName-APPID>.cos.<Region>.myqcloud.com
Date: GMT Date
Authorization: Auth String
请求参数
此接口无请求参数。
请求头
此接口仅使用公共请求头部,详情请参见 公共请求头部 文档。
请求体
此接口无请求体。

响应

响应头
此接口仅返回公共响应头部,详情请参见 公共响应头部 文档。
响应体
该请求无响应体。

响应示例

HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Length: 6
Connection: keep-alive
Date: Wed, 08 Sep 2021 03:19:22 GMT
ETag: "4a1dbd5124d2ff06740c55ea3ec89f22"
Last-Modified: Wed, 08 Sep 2021 03:17:13 GMT
Server: tencent-cos
x-cos-hash-crc64ecma: 4071074640841670626
x-cos-request-id: NjEzODJiYmFfNTJiNzJhMDlfMmM5MjhfMTUwZ****

实际案例

软链接文件名:sym
源文件对象名:tar
存储桶:examplebucket-1250000000.cos.ap-beijing.myqcloud.com

示例一:创建软链接(PUT Symlink)

请求

PUT /sym?symlink= HTTP/1.1
Host: examplebucket.cos.ap-beijing.myqcloud.com
x-cos-symlink-target: tar
Authorization: q-sign-algorithm=sha1&q-ak=************************************&q-sign-time=1631070976;1632071026&q-key-time=1631070976;1632071026&q-url-param-list=symlink&q-header-list=host;x-cos-symlink-target&q-signature=****************************************

响应

HTTP/1.1 200 OK
Content-Length: 0
Connection: keep-alive
Date: Wed, 08 Sep 2021 06:27:36 GMT
ETag: "d41d8cd98f00b204e9800998ecf8427e"
Server: tencent-cos
x-cos-request-id: NjEzODU3ZDhfZmNkMzgwYl9kYjg0Xz****
x-cos-storage-class: STANDARD

示例二:获取软链接本身(GET Symlink)

请求

GET /sym?symlink= HTTP/1.1
Host: examplebucket.cos.ap-beijing.myqcloud.com
Authorization: q-sign-algorithm=sha1&q-ak=************************************&q-sign-time=1631071041;1632071091&q-key-time=1631071041;1632071091&q-url-param-list=symlink&q-header-list=host&q-signature=****************************************

响应

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 0
Connection: keep-alive
Date: Wed, 08 Sep 2021 06:36:59 GMT
ETag: "db5570bf61464b46e2bde31ed61a7dc6"
Last-Modified: Wed, 08 Sep 2021 06:27:36 GMT
Server: tencent-cos
x-cos-request-id: NjEzODVhMGJfNjQ1MjQ0MGJfMjBmMTZfM****
x-cos-symlink-target: tar

示例三:通过软链接下载真实对象(GET Object)

请求

GET /sym HTTP/1.1
Host: examplebucket.cos.ap-beijing.myqcloud.com
Authorization: q-sign-algorithm=sha1&q-ak=************************************&q-sign-time=1631071077;1632071127&q-key-time=1631071077;1632071127&q-url-param-list=&q-header-list=host&q-signature=****************************************

响应

HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Length: 6
Content-Type: application/x-tar
Date: Wed, 08 Sep 2021 06:41:30 GMT
Etag: "4a1dbd5124d2ff06740c55ea3ec89f22"
Last-Modified: Wed, 08 Sep 2021 06:27:36 GMT
Server: tencent-cos
X-Cache: MISS from SZ-SQUIDWEB-46
X-Cache-Lookup: MISS from SZ-SQUIDWEB-46:8080
X-Cos-Hash-Crc64ecma: 4071074640841670626
X-Cos-Request-Id: NjEzODViMWFfYjU0ZTQ0MGJfMjI1M****

示例四:通过软链接获取源文件的元数据(HEAD Object)

请求

HEAD /sym HTTP/1.1
Host: examplebucket.cos.ap-beijing.myqcloud.com
Authorization: q-sign-algorithm=sha1&q-ak=************************************&q-sign-time=1638;1632071158&q-key-time=1631071108;1632071158&q-url-param-list=&q-header-list=host&q-signature=****************************************

响应

HTTP/1.1 200 OK
Cache-Control: max-age=259200
Content-Length: 6
Content-Type: application/octet-stream
Date: Wed, 08 Sep 2021 06:58:36 GMT
Etag: "4a1dbd5124d2ff06740c55ea3ec89f22"
Last-Modified: Wed, 08 Sep 2021 06:55:48 GMT
Server: tencent-cos
X-Cache: MISS from SZ-SQUIDWEB-46
X-Cache-Lookup: MISS from SZ-SQUIDWEB-46:8080
X-Cos-Hash-Crc64ecma: 4071074640841670626
X-Cos-Request-Id: NjEzODVmMWNfNzk1MjQ0MGJfMTVjMGVfM****

示例五:删除软链接(DELETE Object)

请求

DELETE /sym HTTP/1.1
Host: examplebucket.cos.ap-beijing.myqcloud.com
Authorization: q-sign-algorithm=sha1&q-ak=************************************&q-sign-time=1631071142;1632071192&q-key-time=1631071142;1632071192&q-url-param-list=&q-header-list=host&q-signature=****************************************

响应

HTTP/1.1 204 No Content
Connection: keep-alive
Date: Wed, 08 Sep 2021 07:01:43 GMT
Server: tencent-cos
x-cos-request-id: NjEzODVmZDdfMzBkMDM4MGJfMTRlMjJf****