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 儲存桶,並設置相應的存取權限。在此範例中,我們將上傳的檔案設為公開可讀。