ruby-on-rails - Ruby on Rails 和 AWS S3 即将到期下载链接

标签 ruby-on-rails amazon-s3

我是编码新手,我希望我能正确解释这个问题。像大多数人一样,我开始使用 Ruby on Rails。

我正在尝试从 AWS S3 请求一个 url,以传递到 20 分钟后过期的客户端浏览器。我已经安装了 aws-sdk gem 并运行了 bundle install 等。

我有一个欢迎 Controller 和一个索引 View 。我的 Controller 中有以下代码:

  class WelcomeController < ApplicationController

  def index
  end

  def doc_download

    require 'aws-sdk'

    s3 = Aws::S3::Client.new(
        access_key_id: 'mykey',
        secret_access_key: 'mykey'
    )

    aws_resource = Aws::S3::Resource::new
    aws_resource.bucket('mynewapp.herokuapp.com').object('1.jpg').presigned_url(:get, expires_in: 20.minutes)

    @download = doc_download

  end

end

那么这在我看来
<p><%= link_to 'Download', @download %></p>

但是什么也没发生,当我点击“下载”链接时页面会刷新。

非常感谢任何帮助,花了几天时间试图从许多试图完成此任务的不同帖子中找出答案。

最佳答案

我在使用 aws-sdk-s3 时也遇到了类似的问题。 gem(版本 1.8.2)。就我而言,我必须将文件上传到 S3,然后向用户显示一个即将到期的 URL。我生成的代码如下所示:

# Upload a file to S3 and return an expiring URL
# @param [IOStream] file
# @param [String] file_path
# @param optional [Integer] expiring_in_seconds (600)
# @returns [String] expiring and pre-signed URL
def upload_file(file, file_path, expiring_in_seconds = 600)

  # upload file to S3
  client = Aws::S3::Client.new
  client.put_object({
                        body: file,
                        bucket: ENV['S3_BUCKET_NAME'],
                        key: file_path
                    })

  # create an S3 object reference
  obj =  Aws::S3::Object.new(ENV['S3_BUCKET_NAME'], file_path)

  # create pre-signed url
  obj.presigned_url(:get, expires_in: expiring_in_seconds)
end

请记住,我的环境变量中有以下 AWS 凭证和设置:
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_REGION
  • S3_BUCKET_NAME
  • S3_SIGNATURE_VERSION
  • 关于ruby-on-rails - Ruby on Rails 和 AWS S3 即将到期下载链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48083611/

    相关文章:

    node.js - NodeJS csv 数据转储到 s3 对象

    amazon-web-services - AWS CLI - 将完整输出保存为日志文件

    javascript - Cognito 用户授权访问 s3 对象?

    css - 使用 rails 中的 Bootstrap 并排设置表单字段

    ruby-on-rails - 如何在 Ruby On Rails 中按升序获取最后 50 条创建的记录

    amazon-web-services - AWS S3 : How to generate a signature for Put Object Copy with ColdFusion?

    java - 使用 Java SDK 将多个文件批处理到 Amazon S3

    ruby-on-rails - 服务器发送的事件和 Rails Streaming

    ruby-on-rails - 解析 'Gemfile'时出错

    javascript - 在模态中使用新表单渲染页面,而不是在 Ruby on Rails/JS 中使用新页面