在这篇文章中,我想分享如何将图片上传到AWS S3,这是亚马逊网络服务提供的美妙的云文件托管解决方案。
我已经在过去写过关于这个话题的文章:如何从Node.js上传文件到S3
首先,安装aws-sdk 库:
npm install aws-sdk
在你的代码中,在你要添加这个文件上传到S3功能的文件的顶部导入它:
import AWS from 'aws-sdk'
接下来,使用SDK来创建一个S3对象的实例。我把它分配给一个s3 变量:
const s3 = new AWS.S3({
accessKeyId: process.env.AWS_S3_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_S3_SECRET_ACCESS_KEY,
})
注意,我在这里使用了两个环境变量:AWS_S3_ACCESS_KEY_ID 和AWS_S3_SECRET_ACCESS_KEY 。
现在是一些 "行政工作"。你需要在AWS上创建一个IAM配置文件(凭证),具有编程访问权限的AWSCloudFormationFullAccess 和AmazonS3FullAccess ,并创建一个该用户可以访问的S3桶。
我不会在这里介绍这方面的内容,因为你可以找到大量关于这方面的文章和文档。我只谈一下你需要的JavaScript代码。
现在,你需要一个图片blob来上传。
你可以使用一个像这样的URL:
const imageURL = 'https://url-to-image.jpg'
const res = await fetch(imageURL)
const blob = await res.buffer()
或者你可以从多部分表单中的表单图像字段上传中获得一个图像:
const imagePath = req.files[0].path
const blob = fs.readFileSync(imagePath)
最后,对s3.upload() ,并调用其.promise() 方法,这样你就可以使用await来等待它完成,以获得上传的文件对象:
const uploadedImage = await s3.upload({
Bucket: process.env.AWS_S3_BUCKET_NAME,
Key: req.files[0].originalFilename,
Body: blob,
}).promise()
AWS_S3_BUCKET_NAME是S3桶的名称,另一个环境变量
最后,你可以通过引用Location 属性来获得S3上上传图片的URL。
你必须确保你将S3桶设置为public,这样你就可以访问该图片的URL。