我在这里有另一个问题Open a CSV file from S3 using Roo on Heroku,但我没有得到任何叮咬 - 所以改写:
我在S3存储桶中有一个CSV文件 我想在基于Heroku的应用程序中使用Roo读取它(即没有本地文件访问) 如何从流中打开CSV文件?
或者有更好的工具吗?
我正在使用Rails 4,Ruby 2.注意如果我从表单发布它,我可以成功打开CSV进行阅读。如何调整此操作以从S3存储桶中捕获文件?
答案 0 :(得分:1)
简短回答 - 不要使用Roo。
我最终使用标准的CSV命令,使用小型CSV文件,您可以使用以下内容将文件内容简单地读入内存:
body = file.read
CSV.parse(body, col_sep: ",", headers: true) do |row|
row_hash = row.to_hash
field = row_hash["FieldName"]
读取从表单传入的文件,只需引用参数:
file = params[:file]
body = file.read
要阅读表单S3,您可以使用AWS gem:
s3 = AWS::S3.new(access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'])
bucket = s3.buckets['BUCKET_NAME']
# check each object in the bucket
bucket.objects.each do |obj|
import_file = obj.key
body = obj.read
# call the same style import code as above...
end
答案 1 :(得分:0)
我基于此将一些代码放在一起:
Make Remote Files Local With Ruby Tempfile
和Roo似乎在传递临时文件时工作正常。我无法直接使用S3。我不是特别喜欢复制方法,但我的处理是在延迟工作时运行的,我想保持Roo功能比我不喜欢文件副本。普通的CSV文件可以在不删除编码信息的情况下工作,但XLS文件不会。