使用Node.js上传图片到S3 的代码示例

1,049 阅读1分钟

在这篇文章中,我想分享如何将图片上传到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_IDAWS_S3_SECRET_ACCESS_KEY

现在是一些 "行政工作"。你需要在AWS上创建一个IAM配置文件(凭证),具有编程访问权限的AWSCloudFormationFullAccessAmazonS3FullAccess ,并创建一个该用户可以访问的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。