/

如何使用Node.js將圖像上傳至S3

如何使用Node.js將圖像上傳至S3

在本篇文章中,我將分享如何使用Amazon Web Services提供的優秀雲端檔案存儲解決方案AWS S3來上傳圖像。

首先,安裝aws-sdk庫:

1
npm install aws-sdk

在你的程式碼頂部導入它,以便在要添加文件上傳至S3功能的文件中使用它:

1
import AWS from 'aws-sdk'

接下來,使用SDK來創建S3物件實例,並將其指派給s3變數:

1
2
3
4
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上創建一個具有AWSCloudFormationFullAccessAmazonS3FullAccess權限的具有程序化訪問權限的IAM設定文件,以及一個該使用者可以訪問的S3存儲桶。

我不會在這裡涵蓋這個方面,因為你可以找到大量關於這方面的文章和文檔。我只會提到你需要的JavaScript代碼。

現在,你需要一個圖像blob來上傳。

你可以使用如下的URL:

1
2
3
const imageURL = 'https://url-to-image.jpg'
const res = await fetch(imageURL)
const blob = await res.buffer()

或者,你可以從表單的圖像字段上傳的多部分表單中獲取圖像:

1
2
const imagePath = req.files[0].path
const blob = fs.readFileSync(imagePath)

最後,調用s3.upload()方法,並調用其.promise()方法,以便你可以使用await等待它完成以獲取上傳的文件對象:

1
2
3
4
5
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:

1
uploadedImage.Location

你必須確保你將S3存儲桶設置為公開,以便可以訪問該圖像的URL。

tags: [“AWS S3”, “Node.js”, “file upload”, “image upload”]