Featured image of post PHP 將檔案上傳到 AWS S3 物件儲存的範例

PHP 將檔案上傳到 AWS S3 物件儲存的範例

PHP 接收 HTML 表單上傳檔案並將其上傳到 AWS S3 儲存的範例。先來看看簡單的 HTML 上傳程式碼…

PHP 接收 HTML 表單上傳檔案並將其上傳到 AWS S3 儲存的範例。

先來看看簡單的 HTML 上傳程式碼,讓 PHP 來接收並上傳。在 HTML 頁面中,我們建立一個簡單的表單,用來選擇要上傳的檔案。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
|  | <!-- index.html --> |
| --- | --- |
|  | <!DOCTYPE html> |
|  | <html> |
|  | <head> |
|  | <meta charset="UTF-8"> |
|  | <title>上傳檔案</title> |
|  | </head> |
|  | <body> |
|  | <form action="upload.php" method="post" enctype="multipart/form-data"> |
|  | <input type="file" name="file"> |
|  | <button type="submit">上傳檔案</button> |
|  | </form> |
|  | </body> |
|  | </html> |

在上述程式碼中,我們使用 <form> 標籤將檔案上傳到 upload.php 腳本,並使用 enctype="multipart/form-data" 屬性指定表單資料類型為 multipart/form-data,以支援檔案上傳。

接下來,在 PHP 中,我們將使用 AWS SDK for PHP 庫來上傳檔案至 S3 儲存。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|  | <?php |
| --- | --- |
|  | // upload.php |
|  |  |
|  | require 'vendor/autoload.php'; // 引入 AWS SDK for PHP  |
|  |  |
|  | use Aws\S3\S3Client; |
|  |  |
|  | if ($_SERVER['REQUEST_METHOD'] === 'POST') { |
|  | if (isset($_FILES['file'])) { |
|  | $bucketName = 'your-bucket-name'; // 請更改為您的 S3 桶名稱 |
|  | $s3Key = 'uploads/' . basename($_FILES['file']['name']); |
|  | $file = $_FILES['file']['tmp_name']; |
|  |  |
|  | $s3 = new S3Client(['version' => 'latest', |
|  | 'region' => 'your-region', // 請更改為您的 S3 桶區域 |
|  | 'credentials' => ['key' => 'your-access-key', |
|  | 'secret' => 'your-secret-key', |
|  | ], |
|  | ]); |
|  |  |
|  | try { |
|  | $s3->putObject(['Bucket' => $bucketName, |
|  | 'Key' => $s3Key, |
|  | 'Body' => fopen($file, 'r'), |
|  | 'ACL' => 'public-read', // 設定為公開可讀 |
|  | ]); |
|  | echo '檔案上傳成功'; |
|  | } catch (Exception $e) { |
|  | echo '檔案上傳失敗:' . $e->getMessage(); |
|  | } |
|  | } else { |
|  | echo '沒有選擇要上傳的檔案'; |
|  | } |
|  | } else { |
|  | echo '無效的請求方法'; |
|  | } |

在上述 PHP 程式碼中,我們首先引入了 AWS SDK for PHP 庫,然後根據需要創建一個 S3 客戶端物件。接著,我們從 $_FILES 全域變數中獲取上傳的檔案,並使用 S3 客戶端物件將檔案上傳至指定的桶中。

需要注意的是,您需要先在 AWS 中創建一個 S3 儲存桶,並設置相應的存取權限。在此範例中,我們將上傳的檔案設為公開可讀。

Licensed under CC BY-NC-SA 4.0