通过Rails上的活动管理员从S3下载pdf

时间:2018-07-14 07:55:02

标签: ruby-on-rails ruby-on-rails-4 amazon-s3 paperclip

我有一个通过回形针gem在order_items表中上传的PDF。 PDF已成功上传,通过访问生成的S3 URL,我可以看到上传的文件。

我的问题是,当我以活动管理员的身份下载文件时,它给我错误:

  ActionController::MissingFile
  Cannot read file

我在活动管理员中的member_action是:

  member_action :art_proof, method: :get do    
@order      = resource
@order_item = @order.order_items.where(id: params[:item_id]).first
@uniform    = @order_item.uniform
@stock      = @order_item.stock
if @order_item.decoration_preview.url
  send_file @order_item.decoration_preview.url,
            filename: @order_item.decoration_preview_file_name,
            type: @order_item.decoration_preview_content_type
  render :nothing => true
else
  render layout: false
end

结束

我正在尝试通过send_file方法下载文件。知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

我认为您不能将send_file与S3 URL一起使用。相反,我对URL进行了预签名,并对URL进行了redirect_to签名。像这样:

aws_resource = Aws::S3::Resource.new(credentials: credentials)
presigner = Aws::S3::Presigner.new(client: aws_resource.client)
redirect_to presigner.presigned_url(:get_object, bucket: bucket_name, key: file.key)