預設情況下,如果新添加檔案與現有檔案(Object)同名且對該檔案有存取權限,則新添加的檔案將覆蓋原有的檔案。本文介紹如何通過佈建要求頭x-oss-forbid-overwrite在簡單上傳、拷貝檔案及分區上傳等情境中禁止覆蓋同名檔案。
簡單上傳
以下代碼用於簡單上傳時禁止覆蓋同名檔案:
const OSS = require("ali-oss");
const client = new OSS({
// yourregion填寫Bucket所在地區。以華東1(杭州)為例,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名稱。
bucket: 'examplebucket'
});
// yourLocalFile填寫本地檔案完整路徑。
const file = "yourLocalFile";
// 指定上傳檔案操作時是否覆蓋同名Object。此處設定為true,表示禁止覆蓋同名Object。如果同名Object已存在,程式將報錯。
const headers = {
"x-oss-forbid-overwrite": true,
};
async function put() {
try {
// yourObjectName填寫Object的完整路徑。
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({
// yourregion填寫Bucket所在地區。以華東1(杭州)為例,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名稱。
bucket: 'examplebucket'
});
// 指定上傳檔案操作時是否覆蓋同名Object。此處設定為true,表示禁止覆蓋同名Object。如果同名Object已存在,程式將報錯。
const headers = {
"x-oss-forbid-overwrite": true,
};
// yourTargetObject填寫拷貝後目標Object完整路徑。
// yourSourceObject填寫待拷貝的源Object完整路徑。
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填寫Bucket所在地區。以華東1(杭州)為例,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填寫拷貝後的目標Object所在的儲存空間名稱。
bucket: "yourTargetBucket"
});
async function put() {
try {
const result = await client.multipartUploadCopy(
// 填寫拷貝後的目標Object完整路徑。
"yourTargetObject",
{
// 填寫待拷貝的源Object完整路徑。
sourceKey: "yourSourceObject",
// 填寫待拷貝的源Object所在的儲存空間名稱。
sourceBucketName: "yourSourceBucket",
},
{
// 指定拷貝檔案操作時是否覆蓋同名Object。此處設定為true,表示禁止覆蓋同名Object。如果同名Object已存在,程式將報錯。
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填寫Bucket所在地區。以華東1(杭州)為例,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";
// 指定上傳檔案操作時是否覆蓋同名Object。此處設定為true,表示禁止覆蓋同名Object。如果同名Object已存在,程式將報錯。
const headers = {
"x-oss-forbid-overwrite": true,
};
{
// 分區上傳。yourObjectName填寫Object的完整路徑。
client
.multipartUpload("yourObjectName", file, { headers })
.then((res) => {
console.log(res);
})
.catch((e) => {
console.log(e);
});
}
相關文檔
關於在簡單上傳的API介面說明,請參見PutObject。
關於拷貝檔案的API介面說明,請參見CopyObject。
關於分區上傳的API介面說明,請參見InitiateMultipartUpload以及CompleteMultipartUpload。