デフォルトでは、必要なアクセス権限があれば、新しいオブジェクトは同名の既存オブジェクトを上書きします。 このトピックでは、シンプルアップロード、オブジェクトのコピー、マルチパートアップロードで `x-oss-forbid-overwrite` リクエストヘッダーを設定して、この動作を防止する方法について説明します。
シンプルアップロード
次のコードは、シンプルアップロード中に同名のオブジェクトが上書きされるのを防ぐ方法を示しています。
const OSS = require("ali-oss");
const client = new OSS({
// バケットが配置されているリージョンに region を設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、region を oss-cn-hangzhou に設定します。
region: 'yourregion',
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// バケット名を指定します。
bucket: 'examplebucket'
});
// yourLocalFile をローカルファイルの完全なパスに設定します。
const file = "yourLocalFile";
// 同名の既存オブジェクトを上書きするかどうかを指定します。 この例では、このパラメーターを true に設定して上書きを防止します。 同名のオブジェクトが存在する場合、プログラムはエラーを報告します。
const headers = {
"x-oss-forbid-overwrite": true,
};
async function put() {
try {
// yourObjectName をオブジェクトの完全なパスに設定します。
const result = await client.put("yourObjectName", file, { headers });
console.log(result);
} catch (e) {
console.log(e);
}
}
put();オブジェクトのコピー
小規模なオブジェクトのコピー
次のサンプルコードは、同名の既存オブジェクトを上書きせずに小規模なオブジェクトをコピーする方法の例を示しています。
const OSS = require("ali-oss");
const client = new OSS({
// バケットが配置されているリージョンに region を設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、region を oss-cn-hangzhou に設定します。
region: 'yourregion',
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// バケット名を指定します。
bucket: 'examplebucket'
});
// 同名の既存オブジェクトを上書きするかどうかを指定します。 この例では、このパラメーターを true に設定して上書きを防止します。 同名のオブジェクトが存在する場合、プログラムはエラーを報告します。
const headers = {
"x-oss-forbid-overwrite": true,
};
// yourTargetObject を宛先オブジェクトの完全なパスに設定します。
// yourSourceObject をソースオブジェクトの完全なパスに設定します。
client
.copy("yourTargetObject", "yourSourceObject", { headers })
.then((res) => {
console.log(res.res.data.toString("utf8"));
console.log(res);
})
.catch((e) => {
console.log(e);
});大規模なオブジェクトのコピー
次のコードは、マルチパートコピーを使用して大規模なオブジェクトをコピーするときに、同名のオブジェクトが上書きされるのを防ぐ方法を示しています。
const OSS = require("ali-oss");
const client = new OSS({
// yourRegion をバケットが配置されているリージョンに設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、region を oss-cn-hangzhou に設定します。
region: "yourRegion",
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// yourTargetBucket を宛先オブジェクトが配置されているバケットの名前に設定します。
bucket: "yourTargetBucket"
});
async function put() {
try {
const result = await client.multipartUploadCopy(
// 宛先オブジェクトの完全なパスを指定します。
"yourTargetObject",
{
// コピーするソースオブジェクトの完全なパスを指定します。
sourceKey: "yourSourceObject",
// ソースオブジェクトが配置されているバケットの名前を指定します。
sourceBucketName: "yourSourceBucket",
},
{
// 同名の既存オブジェクトを上書きするかどうかを指定します。 この例では、このパラメーターを true に設定して上書きを防止します。 同名のオブジェクトが存在する場合、プログラムはエラーを報告します。
headers: { "x-oss-forbid-overwrite": true },
}
);
console.log(result);
} catch (e) {
console.log(e);
}
}
put();マルチパートアップロード
次のコードは、マルチパートアップロード中に同名のオブジェクトが上書きされるのを防ぐ方法を示しています。
const OSS = require("ali-oss");
const client = new OSS({
// yourRegion をバケットが配置されているリージョンに設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、region を oss-cn-hangzhou に設定します。
region: "yourRegion",
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// yourBucketName をバケットの名前に設定します。
bucket: "yourBucketName",
});
// yourLocalFile をローカルファイルの完全なパスに設定します。
const file = "yourLocalFile";
// 同名の既存オブジェクトを上書きするかどうかを指定します。 この例では、このパラメーターを true に設定して上書きを防止します。 同名のオブジェクトが存在する場合、プログラムはエラーを報告します。
const headers = {
"x-oss-forbid-overwrite": true,
};
{
// マルチパートアップロードを実行します。 yourObjectName をオブジェクトの完全なパスに設定します。
client
.multipartUpload("yourObjectName", file, { headers })
.then((res) => {
console.log(res);
})
.catch((e) => {
console.log(e);
});
}
関連ドキュメント
シンプルアップロード API 操作の詳細については、「PutObject」をご参照ください。
オブジェクトのコピー API 操作の詳細については、「CopyObject」をご参照ください。
マルチパートアップロード API 操作の詳細については、「InitiateMultipartUpload」および「CompleteMultipartUpload」をご参照ください。