Secara default, objek baru akan menimpa objek yang sudah ada jika memiliki nama yang sama dan Anda memiliki izin akses yang diperlukan. Topik ini menjelaskan cara mencegah perilaku tersebut dengan mengatur header permintaan x-oss-forbid-overwrite untuk unggah simple, copy objek, dan unggah multi-bagian.
Unggah simple
Kode berikut menunjukkan cara mencegah penimpaan objek dengan nama yang sama selama unggah simple:
const OSS = require("ali-oss");
const client = new OSS({
// Setel region ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel region ke oss-cn-hangzhou.
region: 'yourregion',
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Tentukan nama bucket.
bucket: 'examplebucket'
});
// Setel yourLocalFile ke path lengkap file lokal.
const file = "yourLocalFile";
// Tentukan apakah objek yang sudah ada dengan nama yang sama boleh ditimpa. Pada contoh ini, parameter ini disetel ke true untuk mencegah penimpaan. Jika objek dengan nama yang sama sudah ada, program akan melaporkan error.
const headers = {
"x-oss-forbid-overwrite": true,
};
async function put() {
try {
// Setel yourObjectName ke path lengkap objek.
const result = await client.put("yourObjectName", file, { headers });
console.log(result);
} catch (e) {
console.log(e);
}
}
put();Copy objek
Copy objek kecil
Kode contoh berikut menunjukkan cara menyalin objek kecil tanpa menimpa objek yang sudah ada dengan nama yang sama:
const OSS = require("ali-oss");
const client = new OSS({
// Setel region ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel region ke oss-cn-hangzhou.
region: 'yourregion',
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Tentukan nama bucket.
bucket: 'examplebucket'
});
// Tentukan apakah objek yang sudah ada dengan nama yang sama boleh ditimpa. Pada contoh ini, parameter ini disetel ke true untuk mencegah penimpaan. Jika objek dengan nama yang sama sudah ada, program akan melaporkan error.
const headers = {
"x-oss-forbid-overwrite": true,
};
// Setel yourTargetObject ke path lengkap objek tujuan.
// Setel yourSourceObject ke path lengkap objek sumber.
client
.copy("yourTargetObject", "yourSourceObject", { headers })
.then((res) => {
console.log(res.res.data.toString("utf8"));
console.log(res);
})
.catch((e) => {
console.log(e);
});Copy objek besar
Kode berikut menunjukkan cara mencegah penimpaan objek dengan nama yang sama saat menyalin objek besar menggunakan copy multi-bagian:
const OSS = require("ali-oss");
const client = new OSS({
// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel region ke oss-cn-hangzhou.
region: "yourRegion",
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Setel yourTargetBucket ke nama bucket tempat objek tujuan berada.
bucket: "yourTargetBucket"
});
async function put() {
try {
const result = await client.multipartUploadCopy(
// Tentukan path lengkap objek tujuan.
"yourTargetObject",
{
// Tentukan path lengkap objek sumber yang akan dicopy.
sourceKey: "yourSourceObject",
// Tentukan nama bucket tempat objek sumber berada.
sourceBucketName: "yourSourceBucket",
},
{
// Tentukan apakah objek yang sudah ada dengan nama yang sama boleh ditimpa. Pada contoh ini, parameter ini disetel ke true untuk mencegah penimpaan. Jika objek dengan nama yang sama sudah ada, program akan melaporkan error.
headers: { "x-oss-forbid-overwrite": true },
}
);
console.log(result);
} catch (e) {
console.log(e);
}
}
put();Unggah multi-bagian
Kode berikut menunjukkan cara mencegah penimpaan objek dengan nama yang sama selama unggah multi-bagian:
const OSS = require("ali-oss");
const client = new OSS({
// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel region ke oss-cn-hangzhou.
region: "yourRegion",
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Setel yourBucketName ke nama bucket.
bucket: "yourBucketName",
});
// Setel yourLocalFile ke path lengkap file lokal.
const file = "yourLocalFile";
// Tentukan apakah objek yang sudah ada dengan nama yang sama boleh ditimpa. Pada contoh ini, parameter ini disetel ke true untuk mencegah penimpaan. Jika objek dengan nama yang sama sudah ada, program akan melaporkan error.
const headers = {
"x-oss-forbid-overwrite": true,
};
{
// Lakukan unggah multi-bagian. Setel yourObjectName ke path lengkap objek.
client
.multipartUpload("yourObjectName", file, { headers })
.then((res) => {
console.log(res);
})
.catch((e) => {
console.log(e);
});
}
Referensi
Untuk informasi selengkapnya tentang operasi API unggah simple, lihat PutObject.
Untuk informasi selengkapnya tentang operasi API copy objek, lihat CopyObject.
Untuk informasi selengkapnya tentang operasi API unggah multi-bagian, lihat InitiateMultipartUpload dan CompleteMultipartUpload.