Node.js禁止覆蓋同名文件
更新時間:
默認(rèn)情況下,如果新添加文件與現(xiàn)有文件(Object)同名且對該文件有訪問權(quán)限,則新添加的文件將覆蓋原有的文件。本文介紹如何通過設(shè)置請求頭x-oss-forbid-overwrite在簡單上傳、拷貝文件及分片上傳等場景中禁止覆蓋同名文件。
簡單上傳
以下代碼用于簡單上傳時禁止覆蓋同名文件:
const OSS = require("ali-oss");
const client = new OSS({
// yourregion填寫B(tài)ucket所在地域。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
region: 'yourregion',
// 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// 填寫B(tài)ucket名稱。
bucket: 'examplebucket'
});
// yourLocalFile填寫本地文件完整路徑。
const file = "yourLocalFile";
// 指定上傳文件操作時是否覆蓋同名Object。此處設(shè)置為true,表示禁止覆蓋同名Object。如果同名Object已存在,程序?qū)箦e。
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填寫B(tài)ucket所在地域。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
region: 'yourregion',
// 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// 填寫B(tài)ucket名稱。
bucket: 'examplebucket'
});
// 指定上傳文件操作時是否覆蓋同名Object。此處設(shè)置為true,表示禁止覆蓋同名Object。如果同名Object已存在,程序?qū)箦e。
const headers = {
"x-oss-forbid-overwrite": true,
};
// yourTargetObject填寫拷貝后目標(biāo)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填寫B(tài)ucket所在地域。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
region: "yourRegion",
// 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量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填寫拷貝后的目標(biāo)Object所在的存儲空間名稱。
bucket: "yourTargetBucket"
});
async function put() {
try {
const result = await client.multipartUploadCopy(
// 填寫拷貝后的目標(biāo)Object完整路徑。
"yourTargetObject",
{
// 填寫待拷貝的源Object完整路徑。
sourceKey: "yourSourceObject",
// 填寫待拷貝的源Object所在的存儲空間名稱。
sourceBucketName: "yourSourceBucket",
},
{
// 指定拷貝文件操作時是否覆蓋同名Object。此處設(shè)置為true,表示禁止覆蓋同名Object。如果同名Object已存在,程序?qū)箦e。
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填寫B(tài)ucket所在地域。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
region: "yourRegion",
// 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量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。此處設(shè)置為true,表示禁止覆蓋同名Object。如果同名Object已存在,程序?qū)箦e。
const headers = {
"x-oss-forbid-overwrite": true,
};
{
// 分片上傳。yourObjectName填寫Object的完整路徑。
client
.multipartUpload("yourObjectName", file, { headers })
.then((res) => {
console.log(res);
})
.catch((e) => {
console.log(e);
});
}
相關(guān)文檔
關(guān)于在簡單上傳的API接口說明,請參見PutObject。
關(guān)于拷貝文件的API接口說明,請參見CopyObject。
關(guān)于分片上傳的API接口說明,請參見InitiateMultipartUpload以及CompleteMultipartUpload。
文檔內(nèi)容是否對您有幫助?