【问题标题】:Accessing data stored in Amazon S3 through Rails通过 Rails 访问存储在 Amazon S3 中的数据
【发布时间】:2013-04-06 21:34:59
【问题描述】:

我的目标是根据用户上传到 Amazon S3 的 excel 文件中的数据制作图表。

我已经实现了用户使用 Carrierwave 上传 excel 文件的功能,现在我需要能够访问数据并使其可与图表库 (Highcharts) 一起使用。

我坚持的任务是通过 Rails 直接访问 S3 中的数据。提取数据后,使用 Highcharts 对其进行操作应该相当简单。

任何建议将不胜感激!

【问题讨论】:

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


    【解决方案1】:

    您可以使用AWS SDK:

    require 'aws-sdk'
    
    # retrieve the access key and secret key
    access_key_id = ENV["ACCESS_KEY_ID"]
    secret_access_key = ENV["SECRET_ACCESS_KEY"]
    
    # create an instance of the s3 client
    s3 = AWS::S3.new(access_key_id: access_key_id, secret_access_key: secret_access_key)
    
    # get the bucket
    bucket = s3.buckets['your-bucket-name']
    
    # retrieve the objects
    bucket.objects.each do |object|
      puts object.key
      puts object.read
    end
    

    【讨论】:

    • 另外,将访问密钥信息直接放入函数中是否存在安全隐患?
    • 抱歉,我没有发布完整的实现。你说得对;你不应该把你的钥匙直接放在代码中。我通常stick them in an environment variable。我会更新我的答案。
    • @LandonSchropp,我得到 AWS::S3::Errors::AccessDenied: Access Denied ,也是从 aws 新密钥和秘密添加策略创建的,我在 s3 设置中做错了什么?跨度>
    【解决方案2】:
    s3 = Aws::S3::Client.new
    bucket = Aws::S3::Bucket.new('AWS_BUCKET NAME HERE')
    bucket.objects.each do |obj|
      File.open("#{Rails.root}/#{obj.key}", 'wb') do |file|
        s3.get_object( bucket:ENV[:AWS_BUCKET], key: obj.key , response_target: file)
      end
    end
    

    s3 = Aws::S3::Client.new
    s3.list_objects(bucket: 'AWS_BUCKET NAME HERE').each do |response|
      response.contents.each do |obj|
        File.open("#{Rails.root}/#{obj.key}", 'wb') do |file|
          s3.get_object( bucket: 'AWS_BUCKET NAME HERE', key: obj.key , response_target: file)
        end
      end
    end
    

    有官方AWS-SDK RUBYgem

    AWS SDK ruby official documentation for version 2

    环境变量配置可以figarodotenv (for development environment)或在~/.bashrc文件中设置。

    注意:

    1. 您需要创建 S3 存储桶并获取 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY
    2. 在开发之前,您可以使用google chrome s3 browser extenstion 测试和访问您的 s3 存储桶数据
    3. 运行命令 source ~/.bashrc。 ~/.bashrc 文件以反映更改,如果您在其中存储 ENV 变量。

    Code Reference

    【讨论】:

      猜你喜欢
      • 2014-12-03
      • 2020-10-08
      • 2013-05-22
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      相关资源
      最近更新 更多