ExAws S3 - 获取上传文件的URL

时间:2017-02-16 19:57:35

标签: elixir

Elixir库ExAws S3模块有一个put_object方法,允许您执行文件上传。

%{path: filepath, filename: filename} = %Plug.Upload{...}
{:ok, contents} = File.read(filepath)
time = DateTime.utc_now() |> DateTime.to_unix
path = "#{Mix.env}/#{time}/#{filename}"

@bucket |> ExAws.S3.put_object(path, contents) |> ExAws.request
=> {:ok, %{body: "", headers: [{"x-amz-id-2", "someid="}, {"x-amz-request-id", "someid"}, {"Date", "Thu, 16 Feb 2017 19:43:01 GMT"}, {"ETag", "\"sometag\""}, {"Content-Length", "0"}, {"Server", "AmazonS3"}], status_code: 200}}

但是,我无法找到上传文件的网址。使用此库,如何获取上传文件的URL?

1 个答案:

答案 0 :(得分:1)

通常,S3中的文件遵循以下模式:

s3://<bucket-name>/<file-key>

其中文件密钥可以包括目录等。那就是将S3协议用于AWS cli等工具时。

但是,对于HTTP类型访问,模式为

https://s3.amazonaws.com/<bucket-name>/<file-key>

但前提是你已经在存储桶中启用了静态托管,并允许访问文件密钥给任何人应该获取它。这不是默认值。您需要手动设置存储桶和文件,以便通过控制台或工具包通过HTTPS读取。看起来可以使用put_bucket_websiteput_bucket_acl和/或put_object_acl的某种组合处理。