通过Rails访问存储在Amazon S3中的数据

4

我的目标是从用户上传到Amazon S3的Excel文件中提取数据,并生成图表。

我已经用Carrierwave实现了用户上传Excel文件的功能,现在需要能够访问数据,并使用图表库(Highcharts)将其呈现出来。

我卡住的任务是如何直接通过Rails访问S3中的数据。一旦获取数据,使用Highcharts进行操作就应该相对简单。

任何建议将不胜感激!

2个回答

5
你可以使用AWS SDK来完成相关的IT技术工作。
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

还有,将访问密钥信息直接放入函数中会有安全隐患吗? - Anconia
抱歉,我没有发布完整的实现。你是对的,不应该直接在代码中放置密钥。我通常会将它们放入环境变量中。我会更新我的回答。 - LandonSchropp
@LandonSchropp,我在S3设置中遇到了AWS :: S3 :: Errors :: AccessDenied:Access Denied的问题。我已经添加了新的密钥和秘钥策略,但仍然出现此错误。请问我做错了什么? - sunil

0
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 RUBY gem

AWS SDK ruby version 2 的官方文档

关于环境变量配置,你可以使用 figaro 或者 dotenv(开发环境用) 或者在 ~/.bashrc 文件中设置。

注意:

  1. 您需要创建S3存储桶并获取AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
  2. 在开发之前,您可以使用Google Chrome S3浏览器扩展程序测试和访问您的S3存储桶数据。
  3. 如果您将环境变量存储在其中,请运行命令source ~/.bashrc. ~/.bashrc文件以反映更改。

代码参考


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接