/

如何從 Node.js 上傳文件到 S3

如何從 Node.js 上傳文件到 S3

我有一個簡單的使用案例。

我正在建立一個工作看板,現在是建立提交新工作職位的表單的時候了。

招聘人員可以輸入公司詳細資料、職位詳細資料和公司標誌圖片。

數據存儲在數據庫中,起初我試圖將標誌存儲在數據庫中,但過了一段時間,我意識到儘管在技術上是可行的,但在存儲二進制數據方面存在一些問題,而且任務需要花費太長的時間。因此,我決定將其上傳到 S3。

S3是AWS提供的一個出色的服務。由於我已經在其他方面使用AWS,添加S3存儲桶很容易。

所以我去創建了一個S3存儲桶。

我已經有了一個AWS帳戶。如果您沒有,請從這裡開始: https://aws.amazon.com

一旦設置好帳戶,請在AWS中創建一個IAM用戶。登錄AWS,點擊頂部的您的名稱,然後點擊“我的安全憑證”。

在側邊欄中點擊“用戶”和“添加用戶”。啟用“編程訪問。”

通過頁面底部的按鈕(“下一步: 權限”)來轉到下一個屏幕。

點擊“直接附加現有策略”:

在過濾器中輸入“S3”以顯示S3策略

選擇AmazonS3FullAccess權限:

用戶創建完成後,您將獲得一對訪問密鑰ID和安全訪問密鑰。將其複製到您的項目中的.env文件中,或者存儲在某個地方以便以後使用。

接下來,進入S3並創建一個存儲桶。從S3首頁https://s3.console.aws.amazon.com點擊“創建存儲桶”按鈕。

設置一個名稱,選擇一個AWS區域,禁用“阻止所有公共訪問”(我們將在另一篇文章中討論權限),然後點擊頁面底部的“創建存儲桶”按鈕。

完成!現在是深入研究Node.js的時候了。我在Next.js中在API調用中使用這段代碼。

首先使用npm install aws-sdk安裝aws-sdk包。

如前所述,將您的AWS訪問代碼存儲在.env中:

1
2
3
AWS_ACCESS_KEY_ID=<訪問密鑰>
AWS_SECRET_ACCESS_KEY=<安全訪問密鑰>
AWS_BUCKET_NAME=<存儲桶名稱>

在頂部添加

1
import AWS from 'aws-sdk'

然後使用以下代碼初始化s3對象:

1
2
3
4
const s3 = new AWS.S3({
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
})

現在,當您想要上傳文件時,從存儲中加載它:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const filename = '文件名'
const fileContent = fs.readFileSync(fileName)

const params = {
Bucket: process.env.AWS_BUCKET_NAME,
Key: `${filename}.jpg`,
Body: fileContent
}

s3.upload(params, (err, data) => {
if (err) {
reject(err)
}
resolve(data.Location)
})

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