gpt4 book ai didi

javascript - 如何删除aws s3存储桶中具有相同键的多个对象

转载 作者:行者123 更新时间:2023-12-03 01:55:48 25 4
gpt4 key购买 nike

TLDR;如何删除 s3 子文件夹中与原始图像具有相同 key 的图像副本?

我有一个 prisma 服务器,并通过 prisma 后端将图像从我的应用程序上传到我的 s3 存储桶。此外,如果需要,我会运行 lambda 函数来动态调整这些图像的大小。

这里是lambda函数的流程

  • 用户通过 S3 存储桶的静态请求请求调整大小的 Assets 网站托管端点。该存储桶的路由规则配置为将任何对无法更改的对象的请求重定向到调整大小 API成立。
  • 由于存储桶中不存在调整大小的 Assets ,因此请求暂时重定向到调整大小 API 方法。
  • 用户的浏览器遵循重定向并通过 API Gateway 请求调整大小操作。
  • API Gateway 方法配置为触发用于服务请求的 Lambda 函数。
  • Lambda 函数下载来自 S3 存储桶的原始图像,调整其大小,然后上传将图像大小调整回存储桶中作为最初请求的 key 。
  • 当 Lambda 函数完成时,API Gateway 会永久重定向用户访问存储在 S3 中的文件。
  • 用户的浏览器请求现在可以从 S3 存储桶中调整大小的图像。
  • 后续请求此用户和其他用户将直接从 S3 获得服务并绕过调整大小操作。
  • 如果调整后的图像将来被删除,重复上述过程并重新创建调整大小的图像替换到 S3 存储桶中。

https://aws.amazon.com/blogs/compute/resize-images-on-the-fly-with-amazon-s3-aws-lambda-and-amazon-api-gateway/

<小时/>

这让我想到以下问题:每当我在 Prisma 中删除带有键的图像节点时,我都可以从 aws s3 中删除具有相同键的对象,但我不会在相应分辨率的子文件夹中触摸它调整大小的副本。我怎样才能实现这个目标?我尝试通过仅传递一个键来使用 aws 的 deleteObjects() ,如下所示。但是,这只会删除存储桶根部的原始图像。

这是 lambda 函数的实现

exports.processDelete = async ( { id, key }, ctx, info) => {

const params = {
Bucket: 'XY',
Delete: {
Objects: [
{
Key: key,
},
],
Quiet: false
}
}

// Delete from S3
const response = await s3
.deleteObjects(
params,
function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
}
).promise()

// Delete from Prisma
await ctx.db.mutation.deleteFile({ where: { id } }, info)

console.log('Successfully deleted file!')
}

最佳答案

因为我只允许调整某些分辨率的大小,所以我最终执行了以下操作:

exports.processDelete = async ( { id, key }, ctx, info) => {
const keys = [
'200x200/' + key,
'293x293/' + key,
'300x300/' + key,
'400x400/' + key,
'500x500/' + key,
'600x600/' + key,
'700x700/' + key,
'800x800/' + key,
'900x900/' + key,
'1000x1000' + key,
]

const params = {
Bucket: 'XY',
Delete: {
Objects: [
{
Key: key,
},
{
Key: keys[0],
},
{
Key: keys[1],
},
{
Key: keys[2],
},
{
Key: keys[3],
},
{
Key: keys[4],
},
{
Key: keys[5],
},
{
Key: keys[6],
},
{
Key: keys[7],
},
{
Key: keys[8],
},
{
Key: keys[9],
},
],
Quiet: false
}
}

如果有更优雅的方式,请告诉我。 :)

关于javascript - 如何删除aws s3存储桶中具有相同键的多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50229973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com