[英]unable to upload image file to S3 bucket via PHP
我正在嘗試通過 AWS PHP SDK 將圖像上傳到我的 S3 存儲桶。 對於我的 EC2 實例,我附加了一個角色,該角色允許我的 S3 存儲桶使用 PutObject 和 GetObject。 因此,據說我在創建 S3Client 時不需要附加憑據。 我還在學習。
這是我的 PHP 腳本:
<?php
require './aws/aws-autoloader.php';
use Aws\S3\S3Client;
use Aws\Exception\AwsException;
use Aws\Credentials\Credentials;
$s3 = new Aws\S3\S3Client([
'version' => 'latest',
'region' => 'us-east-1'
]);
$filename = $_FILES['file']['name'];
try {
$result = $s3->putObject([
'Bucket' => 'bucket name',
'Key' => 'testimage1',
'Body' => $filename
]);
echo 'DONE';
} catch (Exception $e) {
echo $e;
}
我不斷收到此表單中的 500 內部錯誤。 顯然錯誤發生在創建 S3Client 時,我不知道為什么。
進一步探測證實,當我嘗試實例化 S3Client class 時,會引發 500 內部錯誤。 我可以從 CLI 訪問 S3 存儲桶,但無法使用 AWS PHP SDK 訪問。
任何人都可以在這方面提供建議嗎? 感謝您的閱讀。
根據文檔,S3Client Class 的使用是這樣的: https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_configuration.ZFC35FDC70D5FC69D236988C3
use Aws\S3\S3Client;
$options = [
'region' => 'us-east-1',
'version' => '2006-03-01',
'signature_version' => 'v4'
];
$s3Client = new S3Client($options);
它還說,“我們不建議在生產應用程序中使用最新版本,因為引入包含 API 更新的 SDK 的新次要版本可能會破壞您的生產應用程序。”
我解決了它,但我使用了作曲家。 所以這里有一個分步指南。
這是假設您已創建具有完全 S3 訪問權限或至少附加了 PutObject 策略的 IAM 角色,並且 IAM 角色已附加到 EC2 實例。 此外,您的 EC2 實例已安裝 web 服務器。
/var/www/html
(您的 web 服務器托管您的網頁的文件夾)中,按照此處在您的項目文件夾中的指導安裝 composer。 為了方便起見,我選擇全局安裝 composer。yum install php-xml
並重新運行 AWS PHP SDK 的安裝。這是我的上傳代碼,我的供應商文件夾是根級別的,其中 php 文件用於將文件上傳到 S3 存儲桶。
require 'vendor/autoload.php';
use Aws\S3\S3Client;
try{
$sharedConfig = [
'region' => 'us-east-1',
'version' => 'latest'
];
$sdk = new Aws\Sdk($sharedConfig); /*Instantiate SDK class with configs for API use*/
$s3Client = $sdk->createS3(); /*creates the S3 Client for API use*/
$file_name = $_FILES['file']['name']; /*file name e.g. name.jpg */
$file_tmp_name = $_FILES['file']['tmp_name']; /*!!! IMPORTANT - this is what you need to supply the SourceFile to properly upload the file*/
$file_type = $_FILES['file']['type']; /*file type*/
/*print_r($_FILES['file']);*/
$result = $s3Client->putObject([
'Bucket' => 'bucket-name',
'Key' => 'testimage.jpg',
'SourceFile' => $file_tmp_name,
'ContentType'=>$file_type,
'ContentDisposition'=>'attachment'
]);
echo "FILE SENT";
}catch(Exception $e){
echo $e;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.