更新於 2024/03/25閱讀時間約 4 分鐘

[Laravel] 設定並上傳檔案到AWS S3

此文章同步刊登於我的部落格


簡介

Simple Storage Service (S3) 是 AWS 最常應用到的服務,只要是需要將檔案上傳到雲端的狀況都可以使用S3,本篇文章將介紹如何設定與使用AWS S3。

設定AWS S3(Simple Storage Service)

官方說明文件

https://laravel-news.com/using-s3-with-laravel

https://youtu.be/FLIp6BLtwjk


一、建立儲存體

  1. 開啟S3設定頁面https://s3.console.aws.amazon.com/s3
  2. 建立儲存槽


  1. 設定儲存體


二、新增IAM用戶

  1. 開啟IAM儀表板


  1. 新增使用者


  1. 設定使用者名稱並選取類型為「存取金鑰」


  1. 一路點選下一步,不要修改任何東西直到建立完成,並記錄下此處顯示的金鑰


  1. 添加內嵌政策


  1. 選擇json編輯器貼入以下內容(From Flysystem docs)
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Sid": "Stmt1420044805001",
    "Effect": "Allow",
    "Action": [
    "s3:ListBucket",
    "s3:GetObject",
    "s3:GetObjectAcl",
    "s3:PutObject",
    "s3:PutObjectAcl",
    "s3:ReplicateObject",
    "s3:DeleteObject"
    ],
    "Resource": [
    "arn:aws:s3:::your-bucket-name",
    "arn:aws:s3:::your-bucket-name/*"
    ]
    }
    ]
    }
  2. 修改Statement.Resource的內容,將名稱改為剛剛建立的儲存體名稱後點選「檢閱政策」
  1. 填寫名稱後按下「建立政策」


Larvel使用MediaLibrary串接AWS S3

一、設定Laravel(可參考官方文件)

  1. 新增migration並執行
    php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="migrations"
    php artisan migration
  2. 執行seeder
    php artisan db:seed --class=MediaTempSeeder
  3. 新增設定檔案
    php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="config"
  4. 設定.env
    AWS_ACCESS_KEY_ID=<public key>
    AWS_SECRET_ACCESS_KEY=<private key>
    AWS_DEFAULT_REGION=<儲存體伺服器>
    AWS_BUCKET=<儲存體名稱>
    AWS_USE_PATH_STYLE_ENDPOINT=true

    MEDIA_DISK=medialibrary
    MEDIA_LIBRARY_ROOT=media_development

二、上傳到本地

  1. 設定.env
    MEDIA_DISK=public
  2. 執行指令
    php artisan storage:link
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.