You can use symbolic links to conveniently access frequently used objects in a bucket. A symbolic link is a shortcut, similar to a shortcut in Windows, that you can use to access an object.
Notes
In this topic, the public endpoint of the China (Hangzhou) region is used. If you want to access OSS from other Alibaba Cloud services in the same region as OSS, use an internal endpoint. For more information about OSS regions and endpoints, see Regions and endpoints.
In this topic, an OSSClient instance is created by using an OSS endpoint. If you want to create an OSSClient by using custom domain names or Security Token Service (STS), see Create an OSSClient instance.
To create a symbolic link, you must have the
oss:PutObjectpermission. To query a symbolic link, you must have theoss:GetObjectpermission. For more information, see Attach a custom policy to a RAM user.If you delete the object file that a symbolic link points to, the symbolic link remains. However, you can no longer access the object file through the symbolic link.
Create a symbolic link
The following code shows how to create a symbolic link.
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Set yourEndpoint to the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Set yourRegion to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou. */
std::string Region = "yourRegion";
/* Specify the bucket name. Example: examplebucket. */
std::string BucketName = "examplebucket";
/* Specify the full path of the object. Example: exampledir/exampleobject.txt. The full path cannot contain the bucket name. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Specify the full path of the symbolic link. Example: shortcut/myobject.txt. */
std::string LinkName = "shortcut/myobject.txt";
/* Initialize network resources. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Set the HTTP header. */
auto meta = ObjectMetaData();
meta.setContentType("text/plain");
/* Set custom object metadata. */
meta.UserMetaData()["meta"] = "meta-value";
/* Create a symbolic link. */
CreateSymlinkRequest request(BucketName, ObjectName, meta);
request.SetSymlinkTarget(LinkName);
auto outcome = client.CreateSymlink(request);
if (!outcome.isSuccess()) {
/* Handle the exception. */
std::cout << "CreateSymlink fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Release network resources. */
ShutdownSdk();
return 0;
}Get a symbolic link
To retrieve a symbolic link, you must have read permissions on it. The following code shows how to retrieve a symbolic link and the name of the object that it points to.
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Set yourEndpoint to the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Set yourRegion to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou. */
std::string Region = "yourRegion";
/* Specify the bucket name. Example: examplebucket. */
std::string BucketName = "examplebucket";
/* Specify the full path of the symbolic link. Example: shortcut/myobject.txt. */
std::string LinkName = "shortcut/myobject.txt";
/* Initialize network resources. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Get the name of the object that the symbolic link points to. */
GetSymlinkRequest request(BucketName, LinkName);
auto outcome = client.GetSymlink(request);
if (!outcome.isSuccess()) {
/* Handle the exception. */
std::cout << "GetSymlink fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
else {
std::cout << " GetSymlink success Symlink name:" << outcome.result().SymlinkTarget() << std::endl;
}
/* Release network resources. */
ShutdownSdk();
return 0;
}References
For more information about the API operation to create symbolic links, see PutSymlink.
For more information about the API operation to retrieve symbolic links, see GetSymlink.