请帮助我了解通过 PHP 将文件上传到 Amazon S3 服务器的过程。我在 EC2 上有一个网站,其中包含用于将文件从客户端机器上传到 S3 服务器的 PHP 脚本。我需要了解的是,该文件是否会直接从客户端机器转到 S3,或者是否会先上传到 EC2,然后再上传到 S3。如果是第二个选项,那么我该如何优化上传,以便文件从客户端机器直接进入 S3?
1 回答
可以使用您指定的任何方案将文件上传到 S3。
在第一个场景中,文件被上传到 EC2 上的 PHP 后端,然后您通过 PUT 请求将其从 PHP 上传到 S3。基本上,在这种情况下,所有上传都通过您的 EC2 服务器。
第二种选择是将文件从客户端的浏览器直接上传到 S3。这是通过直接向 S3 使用 POST 请求和您可以使用 PHP 逻辑生成的策略并将其附加到 POST 请求来完成的。该策略基本上是一组允许 S3 接受上传的规则(没有它,任何人都可以上传您存储桶中的任何内容)。
在第二种情况下,您在 EC2 上的 PHP 脚本只需要为上传生成有效的策略,但正在上传的实际文件将直接进入 S3,而无需通过您的 EC2 服务器。
您可以在此处获得有关第二种情况的更多信息:
http://aws.amazon.com/articles/1434
即使它不是特定于 PHP 的,它也解释了如何生成策略以及如何形成 POST 请求。
您还可以通过阅读 POST 请求的 API 文档来获取更多信息:
http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html
编辑:官方的 AWS SDK for PHP 包含一个帮助类:http: //docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.S3.Model.PostObject.html