我已经尝试了一段时间来设置上传表单的基本PHP实现,以便上传到亚马逊的S3服务,但我无法正常工作。
通过他们的文档阅读,他们的例子似乎都不同。 提供凭据和上传文件的正确方法是什么?
在他们的github回购中,它说:
// Require the Composer autoloader.
require 'vendor/autoload.php';
use Aws\S3\S3Client;
// Instantiate an Amazon S3 client.
$s3 = new S3Client([
'version' => 'latest',
'region' => 'us-west-2'
]);
try {
$s3->putObject([
'Bucket' => 'my-bucket',
'Key' => 'my-object',
'Body' => fopen('/path/to/file', 'r'),
'ACL' => 'public-read',
]);
} catch (Aws\Exception\S3Exception $e) {
echo "There was an error uploading the file.\n";
}
在http://docs.aws.amazon.com/aws-sdk-php/v2/guide/service-s3.html他们说:
use Aws\S3\S3Client;
$client = S3Client::factory(array(
'profile' => '<profile in your aws credentials file>'
));
// Upload an object by streaming the contents of a file
// $pathToFile should be absolute path to a file on disk
$result = $client->putObject(array(
'Bucket' => $bucket,
'Key' => 'data_from_file.txt',
'SourceFile' => $pathToFile,
'Metadata' => array(
'Foo' => 'abc',
'Baz' => '123'
)
));
// We can poll the object until it is accessible
$client->waitUntil('ObjectExists', array(
'Bucket' => $this->bucket,
'Key' => 'data_from_file.txt'
));
最近能够做到这一点的人能否对这里的设置有所了解?
答案 0 :(得分:2)
您链接到的文档中的密钥是这句话:
您可以像前面的示例一样提供您的凭据配置文件, 直接指定您的访问密钥(通过密钥和密钥),或者您可以 如果您使用AWS,请选择省略任何凭据信息 EC2实例的身份和访问管理(IAM)角色
因此,如果您是从EC2实例运行它,那么您可以简单地省略任何提及的凭据,它应该从与该实例关联的角色中获取权限。
如果您没有在AWS中运行,则需要为运行代码的用户创建〜/ .aws / config,并创建类似于
的配置文件[profile profile_name]
aws_access_key_id = key
aws_secret_access_key = secret
region = us-east-1
然后你就做了:
$client = S3Client::factory(array(
'profile' => 'profile_name'
));
答案 1 :(得分:0)
我最终只是使用嵌入式凭据
来实现它<?php
date_default_timezone_set("America/Denver");
require "./aws/aws-autoloader.php";
use Aws\S3\S3Client;
$s3Client = S3Client::factory(array(
'credentials' => array(
'key' => 'key',
'secret' => 'secret',
),
"region" => "us-east-1",
"version" => "latest"
));
?>