【问题标题】:How to upload file to Amazon S3?如何将文件上传到 Amazon S3?
【发布时间】:2015-10-22 04:58:54
【问题描述】:

我有一个在 AWS EC2 实例上运行的 PHP 应用程序。我想将文件上传到单元,然后将该文件保存到 S3 存储桶。我可以将文件上传到 Ec2 实例,但现在有问题,但对于我的生活,我无法弄清楚如何使用 puObject 调用将其移动到 S3 实例......我对 AWS 很陌生,所以如果有人可以给给个指点,很有帮助!

【问题讨论】:

  • 只是想了解更多,您的应用是网络应用吗?如果是,您可以选择将上传任务卸载到 Web 客户端界面,这意味着您的用户将直接将图像上传到 S3,而不是先上传到您的后端应用程序,然后再上传到 S3。

标签: amazon-web-services amazon-s3 amazon-ec2


【解决方案1】:

对于如何使用 PHP 将数据从 EC2 实例传输到 S3,您有三种选择:

1。使用AWS PHP SDK

这是首选选项。该 SDK 由 Amazon 发布,包括一个易于使用的 API 接口,适用于他们的所有服务。它还可以允许您将 EC2 实例的 IAM 角色用于凭证,这意味着您不一定需要将 API 密钥等存储在代码中。 Example use:

// Use an Aws\Sdk class to create the S3Client object.
$s3Client = $sdk->createS3();

// Send a PutObject request and get the result object.
$result = $s3Client->putObject([
    'Bucket' => 'my-bucket',
    'Key'    => 'my-key',
    'Body'   => file_get_contents($pathToYourFile)
]);

// Download the contents of the object.
$result = $s3Client->getObject([
    'Bucket' => 'my-bucket',
    'Key'    => 'my-key'
]);

// Print the body of the result by indexing into the result object.
echo $result['Body'];

2。使用 EC2 实例的 AWS CLI

这不太理想,但仍然可行。我不建议这样做,因为这意味着您使用 PHP 来访问 shell,并假设 shell 配置了 AWS CLI(如果不是所有 EC2 实例默认情况下都会这样做)。示例:

shell_exec('aws s3 cp /path/to/your/file.txt s3://bucket-name/path/your/file.txt');

3。使用 REST 烘焙您自己的 S3 API 调用

这可能是使用 SDK 之后的下一个最佳选择,尽管它要求您将凭证存储在代码中,必须制定 HMAC 签名并确保您的 API 结构符合 Amazon 的准则。请注意,PHP SDK 会为您完成这一切,但这样您就不需要安装整个 SDK。

如果你走这条路,你需要阅读如何sign your requests

【讨论】:

  • 在 putObject 调用中,'my-key' 指的是什么?这是 AWS 文档似乎刚刚出现的那些东西之一,但我无法得到一个体面的解释它是什么......
  • 所以在 S3 中有两个概念 - bucketkey。存储桶是您存储东西的容器,例如“我的桶”,关键是它的路径。它可能看起来像一个文件夹和文件路径,例如“path/to/my/file.txt” - 因此完整的 AWS 资源路径在本例中为 s3://my-bucket/path/to/my/file.txt。将其视为“文件名”
  • 啊哈!所以这只是让我头上的灯亮了!非常感谢 - 出于某种原因,在你解释之前,我一直没有完全理解这个想法。
  • 不用担心 - 它看起来有点复杂,但实际上是一个非常简单的系统。
  • 好吧,这让我发疯了。一些代码:需要'vendor/autoload.php'; $sharedConfig = ['region' => 'us-west-2', 'version' => 'latest' ]; $sdk = 新 Aws\Sdk($sharedConfig);这一切都有效,直到它到达最后一行,然后它就失败了......
猜你喜欢
  • 1970-01-01
  • 2012-02-02
  • 2011-04-07
  • 2019-12-10
  • 2013-09-09
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
相关资源
最近更新 更多