我有一台prisma服务器,并通过prisma后端将我的应用程序中的图像上传到我的s3存储桶。此外,如果需要,我运行lambda函数来动态调整这些图像的大小。
这是lambda函数的过程
这让我想到以下问题: 每当我在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!')
}
答案 0 :(得分:1)
我之前做过类似的事情。我们将path/to/my/image/11222333.jpg
中的图像和path/to/my/image/11222333/200x200.jpg
中的图像存储起来。因此,当删除112233.jpg时,我们只需要列出文件夹中的所有再现并删除它们。
答案 1 :(得分:0)
因为我只允许调整某些分辨率的大小,所以我最终做了以下事情:
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
}
}
如果有更优雅的方式,请告诉我。 :)