默认情况下,如果新添加文件与现有文件(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。