Amazon Simple Storage Service (S3) 已成為基於 Web 的檔案儲存的業界標準。它的設計具有高達 99.999999999% 的耐用性和安全性。它還具有靈活的儲存類別、資料管理和分析功能。
您是否正在使用 Go 為您的專案建立伺服器端應用程式並需要儲存選項?本文假設您是 AWS 初學者,將引導您完成從 Go 應用程式使用 S3 進行儲存的過程。
使用正確的權限和參數設定 AWS S3 儲存桶可能會令人望而生畏。您必須建立一個儲存桶,建立一個 IAM 用戶,向 IAM 用戶授予在儲存桶上執行操作的權限,並在您的環境中設定存取金鑰。
首先,建立一個 Amazon AWS 帳戶並登入(如果您還沒有帳戶)。然後,像這樣搜尋S3。
現在,點選「建立儲存桶」。系統會提示您根據項目的規格配置儲存桶。
現在您已經建立了儲存桶,下一步是設定一個 IAM 用戶,您將向該用戶授予存取 S3 儲存桶的權限。
前往您的個人資料的安全憑證部分並建立一個使用者。
然後,為使用者建立存取金鑰並檢索存取金鑰和秘密金鑰。
在您電腦的根目錄中,建立一個 .aws 資料夾和一個名為credentials(不含副檔名)的檔案;然後像這樣新增鍵:
[default] aws_access_key_id = <aws_access_key_id here> aws_secret_access_key = <aws_secret_access_key here>
現在,向使用者頒發這些權限以允許 S3 上傳。
最後,初始化Go專案並安裝AWS Go SDK。
go mod tidy go get github.com/aws/aws-sdk-go
您已完成所有設置,現在,您可以開始使用 AWS S3 儲存桶上傳、下載和管理檔案。
首先,您必須從AWS SDK套件中匯入必要的套件。
將這些模組新增至 main.go 檔案或您正在使用的任何檔案的頂部:
package main import ( "bytes" "fmt" "io" "os" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" )
要上傳文件,您必須建立一個新會話,開啟文件,然後使用會話實例來上傳文件。
[default] aws_access_key_id = <aws_access_key_id here> aws_secret_access_key = <aws_secret_access_key here>
UploadFile 函數接收儲存桶名稱、AWS 區域、檔案金鑰和 ACL(存取控制清單),並使用指定金鑰將指定檔案上傳至 S3。
session.NewSession 函數會建立一個新的 AWS 會話,s3.New 會建立一個新的 S3 會話。 PutObject 函數使用檔案 Bucket、Key、檔案正文和 ACL 接收對 PutObjectInput 的引用。
go mod tidy go get github.com/aws/aws-sdk-go
當我使用參數呼叫 UploadFile 函數時,這是檔案已上傳到我的 S3 儲存桶的證據。
您隨時可以透過在 AWS S3 控制台上按一下檔案名稱來瀏覽檔案的更多詳細資訊。
現在,您可以嘗試使用指定的金鑰檢索檔案。
package main import ( "bytes" "fmt" "io" "os" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" )
建立客戶端實例後,GetObject函數接收&s3.GetObjectInput實例中的檔案參數。現在您可以使用 io.Copy 函數將檔案流複製到您的首選目的地。
func UploadFile(bucket, region, filePath, key, acl string) error { sess, err := session.NewSession(&aws.Config{ Region: aws.String(region), }) if err != nil { return fmt.Errorf("error creating session: %w", err) } file, err := os.Open(filePath) if err != nil { return fmt.Errorf("error opening file: %w", err) } defer file.Close() var buf bytes.Buffer if _, err := io.Copy(&buf, file); err != nil { return fmt.Errorf("error reading file: %w", err) } _, err = s3.New(sess).PutObject(&s3.PutObjectInput{ Bucket: aws.String(bucket), Key: aws.String(key), Body: bytes.NewReader(buf.Bytes()), ACL: aws.String(acl), }) if err != nil { return fmt.Errorf("error uploading file: %w", err) } fmt.Println("File uploaded successfully:", filePath, "to key:", key) return nil }
使用 DownloadFile 函數執行程式時,應將檔案下載到您指定的目標路徑。
您還需要在目標路徑中的金鑰中指定金鑰。
要從 S3 儲存桶中刪除文件,您將使用 AWS 開發工具包的 DeleteObject 函數來刪除該文件。您必須指定 S3 儲存桶名稱和要刪除的檔案金鑰。
func main() { bucket := "cloudboxbucket" region := "eu-north-1" filePath := "Makefile" key := "Makefile" acl := "private" if err := UploadFile(bucket, region, filePath, key, acl); err != nil { fmt.Println("Error uploading file:", err) } }
DeleteFile 函數首先建立一個會話,就像上傳和下載範例一樣。 s3Client.DeleteObject 使用 DeleteObjectInput 結構進行調用,您將在其中指定 Bucket 和 Key 參數。
您可以使用WaitUntilObjectNotExists函數來確認該檔案不存在。
func DownloadFile(bucket, region, key, destPath string) error { sess, err := session.NewSession(&aws.Config{ Region: aws.String(region), }) if err != nil { return fmt.Errorf("error creating session: %w", err) } s3Client := s3.New(sess) output, err := s3Client.GetObject(&s3.GetObjectInput{ Bucket: aws.String(bucket), Key: aws.String(key), }) if err != nil { return fmt.Errorf("error downloading file: %w", err) } defer output.Body.Close() destFile, err := os.Create(destPath) if err != nil { return fmt.Errorf("error creating destination file: %w", err) } defer destFile.Close() if _, err := io.Copy(destFile, output.Body); err != nil { return fmt.Errorf("error saving file: %w", err) } fmt.Println("File downloaded successfully:", key, "to", destPath) return nil }
執行DeleteFile函數時,可以看到我的S3儲存桶中不再存在Makefile。
您已了解如何為 IAM 使用者設定 S3 儲存桶(也適用於 root 使用者)以及如何從 S3 儲存桶上傳、下載和刪除檔案。
您可以使用 AWS S3 儲存桶執行更多功能。我希望這篇文章能為您提供進一步的基礎,具體取決於您的專案的用例。
以上是在 Amazon Sith Go 中管理文件的初學者指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!