gpt4 book ai didi

node.js - 如何将图片上传到本地S3存储桶并自动生成缩略图?

转载 作者:行者123 更新时间:2023-12-02 16:53:01 29 4
gpt4 key购买 nike

晚上好

我有这个任务。我必须使用 Node JS 将图像上传到 S3 存储桶,并动态生成缩略图,而不是使用 lambda 触发器。一切都应该在我的本地机器终端(或本地服务器( postman ))上完成。我尝试了这段代码。

const fs = require('fs');

const ACESS_ID = 'A**********KV';
const SECRET_ID = 'G***********0';
const BUCKET_NAME = 'node-image-bucket';

// Initializing s3 interface
const s3 = new AWS.S3({
accessKeyId: ACESS_ID,
secretAccessKey: SECRET_ID,
});

// File reading function to S3
const uploadFile = (fileName) => {
// Read content from the file
const fileContent = fs.readFileSync(fileName);

// Setting up S3 upload parameters
const params = {
Bucket: BUCKET_NAME,
Key: 'scene2.jpg',
Body: fileContent
};

// Uploading files to the bucket
s3.upload(params, function(err, data){
if(err){
throw err;
}
console.log(data);

console.log(`File uploaded Successfully. ${data.Location}`);
});
};


uploadFile('./images/bg-hd.jpg');

上面的代码对于单个图像运行良好,问题是每次我将文件上传到 S3 存储桶时,我都需要更改 S3 params 键字符串值

我想一次上传多个图像并创建一个缓冲区以提高性能,并且它应该在不同文件夹的同一存储桶中自动创建缩略图。

大家谁能帮帮我啊!请任何帮助表示赞赏!

最佳答案

您无法通过一个 s3 操作上传多个文件,但您可以在上传之前使用 Sharp 模块 https://www.npmjs.com/package/sharp在调用 s3 api 之前调整图像大小。

import * as sharp from 'sharp';

async function resize(buffer , width, height) {
return sharp(buffer).resize(width, height).toBuffer();
}

const thumbnailWidthSize = 200;
const thumbnailWidthHeight = 200;
const thumbnailImage = await resize(fileContent, thumbnailWidthSize, thumbnailWidthHeight)

然后,您可以重用当前的上传函数,并使用不同的键运行所需的图像大小调整次数,并将这些调用包装在 Promise.all 周围,以便在任何上传失败时操作都会失败。

await promise.all([ 
s3upload(image, imageKey),
s3upload(thumbnailImage, thumbnailImageKey)
])

关于node.js - 如何将图片上传到本地S3存储桶并自动生成缩略图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59377567/

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