禁止覆盖同名文件
默认情况下,如果已经存在同名文件(Object)且对该文件有访问权限,则新添加的文件将覆盖原有的文件。本文介绍如何通过设置请求头x-oss-forbid-overwrite在简单上传、拷贝文件及分片上传等场景中禁止覆盖同名文件。
简单上传
以下代码用于简单上传时禁止覆盖同名文件:
const OSS = require("ali-oss")
const client = new OSS({
region: '<Your region>',
accessKeyId: '<Your AccessKeyId>',
accessKeySecret: '<Your AccessKeySecret>',
bucket: '<Your bucket name>',
});
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已存在程序将报错。
let result = await client.put('object-name', 'local-file',{headers: { 'x-oss-forbid-overwrite': true }});
console.log(result);
} catch (e) {
console.log(e);
}
}
put();
简单上传的更多详情,请参见PutObject。
拷贝文件
- 拷贝小文件
const OSS = require("ali-oss") const client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: '<Your bucket name>', }); //拷贝同一个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({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: '<Your bucket name>', }); async function put() { try { let 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); } }
拷贝文件的更多详情,请参见CopyObject。
分片上传
以下代码用于分片上传时禁止覆盖同名文件:
const OSS = require("ali-oss")
const client = new OSS({
region: '<Your region>',
accessKeyId: '<Your AccessKeyId>',
accessKeySecret: '<Your AccessKeySecret>',
bucket: '<Your bucket name>',
});
//指定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);
});
分片上传的更多详情,请参见InitiateMultipartUpload以及CompleteMultipartUpload。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论