如何从s3读取文件?

时间:2014-07-25 14:32:44

标签: ruby ruby-on-rails-3

我正在尝试直接从s3读取CSV文件。

我正在获取s3网址但我无法打开它,因为它不在本地系统中。我不想下载文件并阅读它。

还有其他方法可以达到这个目的吗?

3 个答案:

答案 0 :(得分:1)

您可以直接从URL打开文件:

require 'open-uri'
csv = open('http://server.com/path-to-your-file.csv').read

答案 1 :(得分:1)

有几种方法,具体取决于您使用的宝石。例如,来自官方documentation的方法之一:

BucketWithSemiRandomName:
  Type: "AWS::S3::Bucket"
  Properties:
    BucketName: !Join
      - "-"
      - - "bucket-with-semi-random-name"
        - !Select
          - 0
          - !Split
            - "-"
            - !Select
              - 2
              - !Split
                - "/"
                - !Ref "AWS::StackId"

或者如果您使用的是CarrierWave / Fog:

s3 = Aws::S3::Client.new
resp = s3.get_object(bucket:'bucket-name', key:'object-key')

resp.body
#=> #<StringIO ...> 

resp.body.read
#=> '...'

答案 2 :(得分:0)

我认为s3不提供任何方式来阅读文件而不下载它。 你可以做的是将它保存在临时文件中:

@temp_file = Tempfile.open("your_csv.csv")
@temp_file.close
`s3cmd get s3://#{@your_path} #{@temp_file.path}`

有关详情:http://www.ruby-doc.org/stdlib-1.9.3/libdoc/tempfile/rdoc/Tempfile.html