【问题标题】:Rails 5 - Import CSV with Images from URLRails 5 - 从 URL 导入带有图像的 CSV
【发布时间】:2018-01-29 21:57:49
【问题描述】:

导轨 5.1 - 红宝石 2.3.4 - AWS S3 - Carrierwave 和 Minimagick

我想将一个 CSV 文件导入到我的 Rails 应用程序中,并为每条记录上传图片。

图像是来自当前 AWS S3 存储桶的 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

尽管每当我尝试在我的实时服务器上上传。图像未处理。如何正确引用和上传图片?

【问题讨论】:

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


    【解决方案1】:

    我无法加载您拥有的 URL,但它应该可以使用以下内容:

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

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

    背景:

    URI.parse() 返回URI::HTTPS url 编码的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。如果这不能解决这个问题,请分享您的模型的配置

    【讨论】:

    • 此解决方案无效。图片来自我的 S3 存储桶,所以我只是为上面的示例放置了一个通用 URL。我正在将图像上传器安装到单独的 S3 存储桶以进行导入。我想使用 URL 中的图像并将其上传到新存储桶。
    • 你能分享你的模型定义吗? m.image 是如何定义的?什么数据库类型?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 2010-12-06
    • 2012-07-18
    • 2017-05-03
    • 2011-11-29
    • 2015-07-12
    相关资源
    最近更新 更多