我正在尝试直接从s3读取CSV文件。
我正在获取s3网址但我无法打开它,因为它不在本地系统中。我不想下载文件并阅读它。
还有其他方法可以达到这个目的吗?
答案 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