我正在使用ROO gem解析用户在Heroku上上传的Excel文件(带有AWS S3的Active Storage)。
由于我在Heroku上,因此无法将其下载到文件系统上然后进行解析。如何从HTTP打开它?
模型
class Report < ApplicationRecord
has_one_attached :search_report
def parsing_method(path_http)
xlsx = Roo::Spreadsheet.open(path_http)
end
答案 0 :(得分:0)
在类似的应用程序中,我使用了它:
def parsing_method(path_http)
xlsx = Roo::Excelx.new(path_http, nil, :ignore)
end
它应该为您工作。
答案 1 :(得分:0)
是的,您可以在 Heroku 中将其下载到文件系统中。
我怀疑有多少空间,但您应该能够使用临时文件。大多数系统会先将上传内容存储到临时文件系统中,然后再将其推送到其他地方。
我已经这样做了,因为 Roo 打了补丁可以从流中打开 Excel 文件,但不能打开其他类型(csv、ods 等)。
def create_temp_file
filename = some_model.some_attachment.blob.filename
@tmp = Tempfile.new([filename.base, filename.extension_with_delimiter], binmode: true)
@tmp.write(ome_model.some_attachment.download)
@tmp.rewind
@tmp
end
# this is how you use it, note the rescue part
def access_the_file
spreadsheet = Roo::Spreadsheet.open(create_temp_file)
# access the spreadsheet as usual
rescue
@tmp&.unlink
end
这会保留文件前缀和扩展名(对于让 Roo 推断文件是什么很重要)并确保文件在完成后被删除。