わかりましたので、S3 アカウントにアップロードするファイルを取得する方法をいくつか試しました。最後に、自分がどこかに到達し、ブームになっていることに気付きました-紛らわしいドキュメントと、矛盾しているように見える奇妙なエラーメッセージ。
わかりました、私はcomposerなどを使用していません。私はこれを昔ながらの方法で行っています:
require '/path/to/aws-autoload.php';
これで正しくロードされるようになりました。Autoload をトリミングして Common クラスと S3 クラスのみを使用するようにしました。すべては必要ありません。
次に、S3 クライアントと資格情報をロードします。
use Aws\S3\S3Client;
use Aws\Common\Credentials\Credentials;
魔法の出来事を開始するコードは次のとおりです。
$file = '/path/to/' . $filename;
$credentials = new Credentials('KEY', 'SECRET KEY');
$s3 = S3Client::factory(array('credentials' => $credentials));
try{
$s3->putObject(array(
'Bucket' => 'sub.domain.com.s3.amazonaws.com',
'Body' => fopen($file, 'r'),
'ACL' => 'public-read',
));
} catch (S3Exception $e) {
$result = array(
'ok' => false,
'descr' => 'There was an error uploading the file to S3 : ' . $filename
);
}
私が抱えていると思われる問題は、「バケット」自体にあります。
バケットをsub.domain.comとしてフォーマットすると、AWS API から次のメッセージが返されます。
AWS エラー メッセージ: アクセスしようとしているバケットは、指定されたエンドポイントを使用してアドレス指定する必要があります。今後のすべてのリクエストをこのエンドポイント「sub.domain.com.s3.amazonaws.com」に送信してください。
「バケット」を上記のように変更すると、次のようになります:sub.domain.com.s3.amazonaws.com
次のエラー メッセージが表示されます。
AWS エラー メッセージ: 指定されたバケットは存在しません
私は何か間違ったことをしていますか?何か不足していますか?残念ながら、AWS のドキュメントは十分に整っていません。現時点では、API 自体が矛盾しているようです。すべてのキーが正しく、すべての権限が正しいことを知っています。独自のアドバイスから、301 - Redirect to 404 - Not Found になりました。
ヘルプ/アドバイスをいただければ幸いです。ここでちょっとぐるぐるしてる感じ!