默认情况下,如果新添加文件与现有文件(Object)同名且对该文件有访问权限,则新添加的文件将覆盖原有的文件。本文介绍如何通过设置请求头x-oss-forbid-overwrite在简单上传、拷贝文件及分片上传等场景中禁止覆盖同名文件。
简单上传
以下代码用于简单上传时禁止覆盖同名文件:
const OSS = require("ali-oss")
const client = new OSS({
// yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
region: 'yourregion',
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
accessKeyId: 'yourAccessKeyId',
accessKeySecret: 'yourAccessKeySecret',
// yourbucketname填写存储空间名称。
bucket: 'yourbucketname'
});
async function put () {
try {
// object-name可以自定义为文件名(例如file.txt)或目录(例如abc/test/file.txt)的形式,实现将文件上传至当前Bucket或Bucket下的指定目录。
// 指定Put操作时是否覆盖同名Object。
// 不指定x-oss-forbid-overwrite时,默认覆盖同名Object。
// 指定x-oss-forbid-overwrite为false时,表示允许覆盖同名Object。
// 指定x-oss-forbid-overwrite为true时,表示禁止覆盖同名Object,如果同名Object已存在,程序将报错。
const result = await client.put('object-name', 'local-file',{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', // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 accessKeyId: 'yourAccessKeyId', accessKeySecret: 'yourAccessKeySecret', // yourbucketname填写存储空间名称。 bucket: 'yourbucketname' }); // 拷贝同一个Bucket内的文件。 // 指定Copy操作时是否覆盖同名Object。 // 不指定x-oss-forbid-overwrite时,默认覆盖同名Object。 // 指定x-oss-forbid-overwrite为false时,表示允许覆盖同名Object。 // 指定x-oss-forbid-overwrite为true时,表示禁止覆盖同名Object,如果同名Object已存在,程序将报错。 client .copy("test_copy", "test", { headers: { "x-oss-forbid-overwrite": true } }) .then(res => { console.log(res); }) .catch(e => { console.log(e); });
- 拷贝大文件
以下代码用于拷贝大文件(分片拷贝)时禁止覆盖同名文件:
const client = new OSS({ // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。 region: 'yourregion', // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 accessKeyId: 'yourAccessKeyId', accessKeySecret: 'yourAccessKeySecret', // yourbucketname填写存储空间名称。 bucket: 'yourbucketname' }); async function put() { try { const result = await client.multipartUploadCopy( copyName, { sourceKey: objectkey, // 拷贝源文件名。 sourceBucketName: bucket // 拷贝源bucket。 }, { // 指定multipartUploadCopy操作时是否覆盖同名Object。 // 不指定x-oss-forbid-overwrite时,默认覆盖同名Object。 // 指定x-oss-forbid-overwrite为false时,表示允许覆盖同名Object。 // 指定x-oss-forbid-overwrite为true时,表示禁止覆盖同名Object,如果同名Object已存在,程序将报错。 headers: { "x-oss-forbid-overwrite": true } } ); console.log(result); } catch (e) { console.log(e); } }
分片上传
以下代码用于分片上传时禁止覆盖同名文件:
const OSS = require("ali-oss")
const client = new OSS({
// yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
region: 'yourregion',
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
accessKeyId: 'yourAccessKeyId',
accessKeySecret: 'yourAccessKeySecret',
// yourbucketname填写存储空间名称。
bucket: 'yourbucketname'
});
// 指定multipartUpload操作时是否覆盖同名Object。
// 不指定x-oss-forbid-overwrite时,默认覆盖同名Object。
// 指定x-oss-forbid-overwrite为false时,表示允许覆盖同名Object。
// 指定x-oss-forbid-overwrite为true时,表示禁止覆盖同名Object,如果同名Object已存在,程序将报错。
client
.multipartUpload('object-name', 'local-file', { headers: { "x-oss-forbid-overwrite": true } })
.then(res => {
console.log(res);
})
.catch(e => {
console.log(e);
});
相关文档
- 关于在简单上传的API接口说明,请参见PutObject。
- 关于拷贝文件的API接口说明,请参见CopyObject。
- 关于分片上传的API接口说明,请参见InitiateMultipartUpload以及CompleteMultipartUpload。