【发布时间】:2012-03-03 17:49:31
【问题描述】:
请确认是否正确:
- PUT 可能正在将文件上传到 S3?
- COPY 可能是在 S3 中复制文件?
POST 和 LIST 怎么样?
附加问题,get_bucket_filesize() 和 get_object_filesize()(来自 PHP SDK)是否被视为 LIST 请求?
【问题讨论】:
标签: php amazon-s3 amazon-web-services
请确认是否正确:
POST 和 LIST 怎么样?
附加问题,get_bucket_filesize() 和 get_object_filesize()(来自 PHP SDK)是否被视为 LIST 请求?
【问题讨论】:
标签: php amazon-s3 amazon-web-services
根据我使用 S3 的经验(以及 HTTP 协议和 REST 的基础知识),POST 是创建一个新对象(在 S3 中,它将是一个新文件的上传),而 PUT 是创建一个新对象或现有对象的更新(即文件的创建或更新)。另外,from S3 docs:
POST 是 PUT 的另一种形式,它支持基于浏览器的上传 一种将对象放入桶中的方法
例如,每次您获取给定 S3 存储桶的内容时,都会遇到 LIST 操作。您没有问,但 GET 是从 S3 下载文件,而 DELETE 显然是删除文件。当然,这些假设取决于您使用的 SDK(似乎您使用的是 PHP 的)及其底层实现。我的论点是可以使用 GET 实现下载,使用 PUT 或 POST 实现上传等等。
查看S3 REST API,不过,我假设 get_bucket_filesize() 是作为 LIST 实现的(桶上的 GET 操作会带来响应中每个对象的大小以及更多数据)和 get_object_filesize( ) 实现为 GET(对单个文件使用 HEAD 操作也会将其大小包含在元数据中)。
【讨论】:
PUT 和 POST 之间没有太大区别。以下内容是从 AWS S3 文档中复制而来的。
POST 是一种PUT 的替代形式,它允许基于浏览器的上传作为将对象放入存储桶的一种方式。 通过 HTTP 标头传递给 PUT 的参数在 multipart/form-data 编码的消息正文中作为表单字段传递给 POST。
http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html
正如其他人所指定的,LIST 用于列出对象。您可以在以下链接中找到所有操作。
http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketOps.html
【讨论】:
是的,你是对的。 PUT 正在上传(具体来说,一个文件就是一个 PUT)。我正在关注 PUT 是按文件还是按某些数据包大小,这会使定价变得更加困难。它正在放置一个文件(不参考大小)。
另外,COPY 确实是在 S3 中复制文件,但还有更多。见下文。 我还发现了对 POST 和 LIST 的引用;见下文。
所以我在深入评估我们的成本时了解了 PUT/COPY/POST/LIST 和 GET 请求。我还包括我发现它的地方(想从亚马逊得到它)。欢迎大家指正。
亚马逊的常见问题解答在这里:https://aws.amazon.com/s3/faqs/,我将在下面引用。
COPY 可以是几件事,其中之一是在区域之间进行复制,这确实需要成本。例如,如果您在西弗吉尼亚州存储,并复制到北加州地区,则会产生成本。从 EC2 复制到 S3(我假设在同一区域内)不会产生传输成本。请参阅 Q 部分中的 Amazon 常见问题解答:Amazon S3 的成本是多少?
注意:写入文件,然后重新写入同一个文件会存储两个版本(除非您删除某些内容)。我猜如果文件完全相同,您不会被收取更多费用,但如果我错了,请不要将账单寄给我。 :-) 似乎平均大小(一个月)是计费的。请参阅常见问题解答(上面的链接)
对于 PUT、GET 和 DELETE,看起来一个文件就是一个事务。这对我来说回答了一个大问题(我不希望他们的 128k 最小大小成为每个 128k 数据包的 PUT……是的,我很偏执)。请参阅这样的问题部分:
问:如何对我使用 Amazon S3 进行收费和计费?
请求示例:
假设您在 3 月份每天将 10,000 个文件传输到 Amazon S3 并从 Amazon S3 传输 20,000 个文件。然后,您在 3 月 31 日删除了 5,000 个文件。
PUT 请求总数 = 10,000 个请求 x 31 天 = 310,000 个请求
GET 请求总数 = 20,000 个请求 x 31 天 = 620,000 个请求
DELETE 请求总数 = 5,000×1 天 = 5,000 个请求
问题下提到了LIST: 问:我可以使用 Amazon S3 API 或管理控制台列出我已存档到 Amazon Glacier 的对象吗? 它本质上是获取一个文件列表……一个目录,如果你愿意的话。
这里的 RESTObjectPost.html 下提到了 POST:http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html
我希望这会有所帮助。这确实让我对我们收取的费用更加放心。
【讨论】: