通过 Carrierwave 和 Fog 从 Amazon S3 下载文件

Download file from Amazon S3 through Carrierwave and Fog

我在 Rails 中有一个简单的应用程序,它允许我使用 Carrierwave 和 fog 将文件上传到 Amazon S3。它工作正常。我现在正在下载文件并在浏览器上显示它们。有用。但是,来自 S3 的私有 link(我将其设置为临时 link)显示在浏览器上,例如:

https://xxx.s3-ap-southeast-1.amazonaws.com/uploads/resume/attachment/4/xxx.pdf?X-Amz-Expires=100&X-Amz-Date=20150404T082207Z&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=XXX/20150404/ap-southeast-1/s3/aws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=b72ac956fcd52ba887d9e4567d9e512207ba17dc4e5876bfc8c9d16b2db2367d

我不想公开 S3 中的私有 link。相反,我希望显示如下所示的 link: www.xxx.com/user/1/resume/1

我有模型resume.rb

class Resume < ActiveRecord::Base
  mount_uploader :attachment, ResumeUploader
end

控制器显示动作

def show
  @resume = Resume.find(params[:id])
  @resume_name = @resume.attachment.path.split("/").last
end

我的观点:show.html.erb

<%= link_to @resume_name,  @resume.attachment.url  %>

我是 ROR 的新手。谁能告诉我如何在浏览器上显示文件而不显示来自 S3 的私有 url?

您可以通过 CloudFront 路由图像。 Cloud Front 有很多优势,但也需要付出一定的代价。 一旦你通过云端路由你的图像,你就会为你的资产获得一个 link 的域,就像 s3 一样,但是在云端你可以改变 link.

参考: Using Alternate Domain Names