2017-08-21 6 views
1

レールからの画像付きのインポートCSV 5.1 - ルビー2.3.4 - AWS S3 - Carrierwave & MinimagickRailsの5 - URL

私は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 

です。画像は処理されません。どのようにして画像を正しく参照してアップロードできますか?

答えて

0

私はあなたが持っている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 。これで解決しない場合は、モデルの設定を共有してください

+0

この解決策は機能しませんでした。私のS3バケツからの画像ですので、上記の例の汎用URLを入力します。インポートのために別のS3バケットにイメージアップローダーをマウントしています。 URLから画像を使用して新しいバケットにアップロードしたいと思います。 –

+0

モデル定義を共有できますか? m.imageはどのように定義されていますか?どのDBタイプ? – whodini9