是否可以在上传之前获取S3文件URL?

时间:2014-01-27 18:53:16

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

所以,这是场景。我有一个网站,允许您对文件执行某些操作,大约需要几秒。我不希望客户端在服务器返回响应之前必须等待那么久,所以我们现在就拥有它是

  1. 用户在其浏览器(客户端)中执行操作
  2. 客户端向参数
  3. 的服务器发送POST请求
  4. 服务器将操作添加到作业队列并发回结果的预期网址
  5. 客户端ping服务器,直到文件可用,然后提供服务
  6. 目前这些文件存储在我的ec2服务器中,但我想将其移至S3。我想知道这种流程是否可行。

    服务器知道文件将被保存的内容以及文件实际存在的位置,S3的情况也是如此?如果我事先知道所有信息(存储桶,文件名等),有没有办法知道文件URL?

1 个答案:

答案 0 :(得分:0)

所有S3对象网址都遵循模式,因此很容易知道网址将提前

如果存储桶名称符合DNS(除了美国标准以外的所有地区都需要),那么它将如下所示:

<bucket>.s3.amazonaws.com/<object-path>

美国标准区域的存储桶名称规则(它们不是必需符合DNS标准)稍微宽松一些,所以有些可能如下所示:

s3.amazonaws.com/<bucket>/<object-path>

因此,如果您的存储桶名称符合DNS标准(例如example),并且您的文件为abc/123/file.txt,那么您的对象网址将为:

example.s3.amazonaws.com/abc/123/file.txt

因此,如果您的存储桶名称不符合DNS(例如EXAMPLE_123),而您的文件为abc/123/file.txt,则您的对象网址将为:

s3.amazonaws.com/EXAMPLE_123/abc/123/file.txt

以下是官方PHP SDK中符合DNS的逻辑示例。

https://github.com/aws/aws-sdk-php/blob/master/src/Aws/S3/S3Client.php#L293-L317