Rails 5 - 从URL导入带有图像的CSV

时间:2017-08-21 18:37:15

标签: ruby-on-rails ruby csv file-upload amazon-s3

Rails 5.1 - Ruby 2.3.4 - AWS S3 - Carrierwave& Minimagick

我想将CSV文件导入我的Rails应用程序,并同时上传每张记录的图像。

图像是来自当前AWS S3 Bucket的URL。我可以从本地驱动器上传,但只能在开发中上传。

  def self.import(file)
    CSV.foreach(file.path, headers: true, header_converters: :symbol) do |row|
      Model.find_or_create_by(name: row[:name]) do |m|
        m.name = row[:name]
        m.description = row[:description]
        m.image = URI.parse(row[:image])
        m.summary = row[:summary]
      end
    end
  end

CSV只是

name,descripton,image,summary
Test,Test-Description,https://s3.amazonaws.com/main/production/model/7/image/image-formated.jpg,Test-Summary

虽然每当我尝试在我的直播服务器上传时。图像不会被处理。如何正确引用和上传图像?

1 个答案:

答案 0 :(得分:0)

我无法加载您拥有的网址,但它应该与以下内容一起使用:

m.image = URI.parse(row[:image]).open

这将返回一个临时文件,Rails将与该模型关联。

<强>背景

URI.parse()返回URI::HTTPS网址编码的URI,例如:

URI.parse('https://google.com/search?q=test this')
# => #<URI::HTTPS https://google.com/search?q=test%20this> # where %20 is a url encoded space

因此,假设您的模型需要图像文件,您希望打开并保存文件而不是URI。如果这不能解决这个问题,请分享您的模型的配置