【发布时间】:2015-03-01 10:46:44
【问题描述】:
我想使用 Javascript 从 Amazon S3 中删除一个文件。我已经使用 Javascript 上传了文件。有什么想法吗?
【问题讨论】:
标签: javascript amazon-web-services amazon-s3 aws-sdk amazon
我想使用 Javascript 从 Amazon S3 中删除一个文件。我已经使用 Javascript 上传了文件。有什么想法吗?
【问题讨论】:
标签: javascript amazon-web-services amazon-s3 aws-sdk amazon
您可以使用JS method from S3:
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./credentials-ehl.json');
var s3 = new AWS.S3();
var params = { Bucket: 'your bucket', Key: 'your object' };
s3.deleteObject(params, function(err, data) {
if (err) console.log(err, err.stack); // error
else console.log(); // deleted
});
请注意,如果对象已被删除,S3 永远不会返回该对象。 您必须在 getobject、headobject、waitfor 等之前或之后检查它
【讨论】:
.promise()。例如:await s3.deleteObject(params).promise()
你可以像这样使用构造:
var params = {
Bucket: 'yourBucketName',
Key: 'fileName'
/*
where value for 'Key' equals 'pathName1/pathName2/.../pathNameN/fileName.ext'
- full path name to your file without '/' at the beginning
*/
};
s3.deleteObject(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
并且不要忘记将它包装到 Promise。
【讨论】:
在删除文件之前,您必须检查 1) 文件是否在存储桶中,因为如果该文件在存储桶中不可用并且使用 deleteObject API 这不会引发任何错误 2)CORS Configuration桶。通过使用headObject API 给出存储桶中的文件状态。
AWS.config.update({
accessKeyId: "*****",
secretAccessKey: "****",
region: region,
version: "****"
});
const s3 = new AWS.S3();
const params = {
Bucket: s3BucketName,
Key: "filename" //if any sub folder-> path/of/the/folder.ext
}
try {
await s3.headObject(params).promise()
console.log("File Found in S3")
try {
await s3.deleteObject(params).promise()
console.log("file deleted Successfully")
}
catch (err) {
console.log("ERROR in file Deleting : " + JSON.stringify(err))
}
} catch (err) {
console.log("File not Found ERROR : " + err.code)
}
由于参数是恒定的,因此最好将其与const 一起使用。如果在 s3 中找不到该文件,则会引发错误 NotFound : null。
如果您想在存储桶中应用任何操作,您必须在 AWS 中更改相应存储桶中CORS Configuration 的权限。用于更改权限Bucket->permission->CORS Configuration 并添加此代码。
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
有关 CROS 配置的更多信息:https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html
【讨论】:
您可以使用deleteObjects API 一次删除多个对象,而不是为每个要删除的键调用 API。有助于节省时间和网络带宽。
您可以执行以下操作-
var deleteParam = {
Bucket: 'bucket-name',
Delete: {
Objects: [
{Key: 'a.txt'},
{Key: 'b.txt'},
{Key: 'c.txt'}
]
}
};
s3.deleteObjects(deleteParam, function(err, data) {
if (err) console.log(err, err.stack);
else console.log('delete', data);
});
参考见 - https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#deleteObjects-property
【讨论】:
你可以关注这个 GitHub gist 链接https://gist.github.com/jeonghwan-kim/9597478。
删除-aws-s3.js:
var aws = require('aws-sdk');
var BUCKET = 'node-sdk-sample-7271';
aws.config.loadFromPath(require('path').join(__dirname, './aws-config.json'));
var s3 = new aws.S3();
var params = {
Bucket: 'node-sdk-sample-7271',
Delete: { // required
Objects: [ // required
{
Key: 'foo.jpg' // required
},
{
Key: 'sample-image--10.jpg'
}
],
},
};
s3.deleteObjects(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
【讨论】:
非常直接
首先,创建一个 s3 的实例并使用凭据对其进行配置
const S3 = require('aws-sdk').S3;
const s3 = new S3({
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
region: process.env.AWS_REGION
});
var params = {
Bucket: "ExampleBucket",
Key: "HappyFace.jpg"
};
s3.deleteObject(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
/*
data = {
}
*/
});
【讨论】: