これは私を夢中にさせています-私はこの問題に数日間取り組んできましたが、ほとんど成功していません. ついに壁にぶち当たりました。助けが必要です。私が検索した記事やフォーラムの多くは、AWSSDK for PHP 2 に関するものではありません。
過去数年間、Amazon の S3 を使用して iOS から画像をロードしてきました。
ここで、ブラウザでアップロードを実装する必要があります。
Ubuntu サーバーに AWSSDK for PHP 2 をダウンロードして正常にインストールしました。AWS S3 アカウントに接続して、バケットの内容を表示できます。しかし、バケツに画像を入れることができません。
AWS からの例外は次のとおりです:
Aws\S3\Exception\NotImplementedException: AWS エラー コード: NotImplemented、ステータス コード: 501、AWS リクエスト ID: CEDC4BBAA83CF70C、AWS エラー タイプ: サーバー、AWS エラー メッセージ: 提供されたヘッダーは、提供されていない機能を意味します実装されました。
以下のサンプルコードを取得した URL は、Amazon S3 へのファイルのアップロードという見出しの下にあります: https://github.com/aws/aws-sdk-php#quick-start
そして、これに基づいてコードを更新しました: AWS PHP SDK バージョン 2 S3 putObject エラー
しかし、それでもうまくいきません。
これが私のコードです:
<?php
require_once("../config.php"); //local config vars
require_once('AWSSDKforPHP/aws.phar');
use Aws\S3\S3Client;
use Aws\Common\Enum\Region;
use Aws\Common\Aws;
use Aws\S3\Enum\CannedAcl;
use Aws\S3\Exception\S3Exception;
use Guzzle\Http\EntityBody;
//get the $s3 object
$config = array(
'key' => AMAZON_ACCESS_KEY,
'secret' => AMAZON_ACCESS_SECRET,
'region' => Region::US_EAST_1
);
$s3 = S3Client::factory($config);
try {
$bucketname = 'my_bucket_name'; //my bucket name on s3
$filename = 'filename.jpg'; //my image on my server
$path = 'http://my.website.com/app/cache/remote'; //the path where the image is located
$fullfilename = $path."/".$filename;
//this successfully lists the contents of the bucket I am interested in
foreach ($s3->getIterator('ListBuckets') as $bucket) {
foreach ($s3->getIterator('ListObjects', array('Bucket' => $bucket['Name'])) as $object) {
if ( $bucket['Name'] == $bucketname ) {
echo $bucket['Name'] . '/' . $object['Key'] . PHP_EOL;
}
}
}
//HERE ME HERE, PLEASE! this is the code that throws the exception
$s3->putObject(array(
'Bucket' => $bucketname,
'Key' => $filename,
'Body' => EntityBody::factory(fopen($fullfilename, 'r')),
'ACL' => CannedAcl::PUBLIC_READ_WRITE,
'ContentType' => 'image/jpeg'
));
} catch (S3Exception $e) {
echo $e;
}
?>
AWSSDK for PHP 2 を使用して S3 のバケットに JPG 画像をアップロードできるように、誰かが例を提供してくれませんか?
解決策: ppostma1 の返信から、コードを次のように変更したところ、動作するようになりました。
$bucketname = 'my_bucket_name'; //must be all lowercase
$filename = 'filename.jpg'; //my image on my server
$path = 'var/www/html/root-website-folder/images/'; //the physical path where the image is located
$fullfilename = $path.$filename;
$s3->putObject(array(
'Bucket' => $bucketname,
'Key' => $filename,
'Body' => EntityBody::factory(fopen($fullfilename, 'r')),
'ACL' => CannedAcl::PUBLIC_READ_WRITE,
'ContentType' => 'image/jpeg'
));