本文介绍如何在受版本控制的存储空间(Bucket)中管理软链接。
创建软链接
您可以通过创建软链接指向TargetObject的当前版本。
说明 在受版本控制的Bucket中,无法为删除标记(Delete Marker)创建软链接。
软链接本身也可以有多个版本,每个不同的版本可以指向不同的TargetObject,版本ID由OSS自动生成,在响应header中返回x-oss-version-id。
以下代码用于创建软链接:
#include <alibabacloud/oss/OssClient.h>
#include <alibabacloud/oss/model/ObjectMetaData.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/*初始化OSS账号信息*/
std::string AccessKeyId = "yourAccessKeyId";
std::string AccessKeySecret = "yourAccessKeySecret";
std::string Endpoint = "yourEndpoint";
std::string BucketName = "yourBucketName";
std::string ObjectName = "yourObjectName";
std::string LinkName = "yourLinkName";
/* 初始化网络等资源 */
InitializeSdk();
ClientConfiguration conf;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
/*设置HTTP header*/
auto meta = ObjectMetaData();
meta.setContentType("text/plain");
/*设置自定义文件元信息*/
meta.UserMetaData()["meta"] = "meta-value";
/* 创建软链接 */
CreateSymlinkRequest request(BucketName, ObjectName, meta);
request.SetSymlinkTarget(LinkObjectName);
auto outcome = client.CreateSymlink(request);
/*查看上传的软链接的版本id*/
if (outcome.isSuccess()) {
std::cout << "versionid:" << outcome.result().VersionId() << std::endl;
}
else {
/* 异常处理 */
std::cout << "CreateSymlink fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
ShutdownSdk();
return -1;
}
/* 释放网络等资源 */
ShutdownSdk();
return 0;
}
创建软链接的详细信息请参见PutSymlink。
获取软链接
GetSymlink接口默认获取软链接的当前版本。允许通过指定versionId来获取指定版本。如果软链接的当前版本为删除标记,OSS会返回404 Not Found,在响应header中返回x-oss-delete-marker
= true以及版本ID : x-oss-version-id。
说明 获取软链接操作需要您对该软链接有读权限。
以下代码用于获取软链接:
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/*初始化OSS账号信息*/
std::string AccessKeyId = "yourAccessKeyId";
std::string AccessKeySecret = "yourAccessKeySecret";
std::string Endpoint = "yourEndpoint";
std::string BucketName = "yourBucketName";
std::string LinkName = "yourLinkName";
/* 初始化网络等资源 */
InitializeSdk();
ClientConfiguration conf;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
/* 获取指定版本的软链接文件 */
GetSymlinkRequest request(BucketName, LinkName);
request.setVersionId("yourObjectVersionId");
auto outcome = client.GetSymlink(request);
/* 查看返回的软链接文件的版本id */
if (outcome.isSuccess()) {
std::cout << "versionid:" << outcome.result().VersionId()
<< "Symlink name:" << outcome.result().SymlinkTarget() << std::endl;
}
else {
/* 异常处理 */
std::cout << "GetSymlink fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
ShutdownSdk();
return -1;
}
/* 释放网络等资源 */
ShutdownSdk();
return 0;
}
获取软链接的详细信息请参见GetSymlink。