Tautan simbolik menyediakan cara praktis untuk mengakses objek yang sering digunakan dalam bucket. Setelah membuat tautan simbolik, Anda dapat menggunakannya seperti shortcut Windows untuk mengakses objek target.
Catatan penggunaan
Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Untuk mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk detail wilayah dan titik akhir yang didukung, lihat Wilayah dan titik akhir.
Topik ini memperoleh kredensial akses dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi kredensial akses.
Topik ini membuat instans OSSClient menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Contoh konfigurasi untuk skenario umum.
Untuk membuat tautan simbolik, Anda harus memiliki izin
oss:PutObject. Untuk mengambil tautan simbolik, Anda harus memiliki izinoss:GetObject. Untuk informasi selengkapnya, lihat Berikan izin kustom kepada RAM user.
Buat tautan simbolik
Kode berikut menunjukkan contoh cara membuat tautan simbolik:
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
public class Demo {
public static void main(String[] args) throws Exception {
// Wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan titik akhir yang sebenarnya.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket. Misalnya, examplebucket.
String bucketName = "examplebucket";
// Tentukan nama tautan simbolik.
String symLink = "yourSymLink";
// Tentukan nama objek yang dituju oleh tautan simbolik.
String destinationObjectName = "yourDestinationObjectName";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel wilayah ke cn-hangzhou.
String region = "cn-hangzhou";
// Buat instans OSSClient.
// Saat instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan sumber daya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Buat metadata objek.
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("text/plain");
// Tetapkan nilai properti metadata kustom menjadi property-value.
metadata.addUserMetadata("property", "property-value");
// Tentukan apakah akan menimpa objek yang memiliki nama yang sama saat membuat tautan simbolik.
// metadata.setHeader("x-oss-forbid-overwrite", "true");
// Tentukan daftar kontrol akses (ACL) objek.
// metadata.setHeader(OSSHeaders.OSS_OBJECT_ACL, CannedAccessControlList.Default);
// Tentukan kelas penyimpanan objek.
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard);
// Buat CreateSymlinkRequest.
CreateSymlinkRequest createSymlinkRequest = new CreateSymlinkRequest(bucketName, symLink, destinationObjectName);
// Tetapkan metadata.
createSymlinkRequest.setMetadata(metadata);
// Buat tautan simbolik.
ossClient.createSymlink(createSymlinkRequest);
} catch (OSSException oe) {
System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai OSS, "
+ "tetapi ditolak dengan tanggapan error karena suatu alasan.");
System.out.println("Pesan Error:" + oe.getErrorMessage());
System.out.println("Kode Error:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Terjadi ClientException, yang berarti client mengalami "
+ "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
+ "misalnya tidak dapat mengakses jaringan.");
System.out.println("Pesan Error:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
} Ambil tautan simbolik
Untuk mengambil tautan simbolik, Anda harus memiliki izin baca terhadapnya. Kode berikut menunjukkan contoh cara mengambil tautan simbolik dan nama file objek yang ditunjuknya:
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
public class Demo {
public static void main(String[] args) throws Exception {
// Wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan titik akhir yang sebenarnya.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket. Misalnya, examplebucket.
String bucketName = "examplebucket";
// Tentukan nama tautan simbolik.
String symLink = "yourSymLink";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel wilayah ke cn-hangzhou.
String region = "cn-hangzhou";
// Buat instans OSSClient.
// Saat instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan sumber daya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Ambil tautan simbolik dan nama file objek yang ditunjuknya.
OSSSymlink symbolicLink = ossClient.getSymlink(bucketName, symLink);
System.out.println(symbolicLink.getSymlink());
System.out.println(symbolicLink.getTarget());
System.out.println(symbolicLink.getRequestId());
} catch (OSSException oe) {
System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai OSS, "
+ "tetapi ditolak dengan tanggapan error karena suatu alasan.");
System.out.println("Pesan Error:" + oe.getErrorMessage());
System.out.println("Kode Error:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Terjadi ClientException, yang berarti client mengalami "
+ "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
+ "misalnya tidak dapat mengakses jaringan.");
System.out.println("Pesan Error:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
} Referensi
Untuk informasi selengkapnya tentang operasi API untuk membuat tautan simbolik, lihat PutSymlink.
Untuk informasi selengkapnya tentang operasi API untuk mengambil tautan simbolik, lihat GetSymlink.