2017-11-30 8 views
0

SideclqワーカーをスローするPaperclipアップロード画像を保存しようとしています。 ユーザは画像を画像[]に選択し、コントローラに(params [:image]として)渡します。Sidekiqでペーパークリップイメージを保存

ビュー:

<%= file_field_tag "image[]", type: :file, multiple: true %> 

私は別のVAR(ファイル)にそれを渡すと、それはコントローラで動作しますが、私はsidekiq_workerにそれを渡すとき、それは文字列のハッシュになり

コントローラ:

file = params[:image] 
SidekiqWorker.perform_async("import_images", file) 

SidekiqWorker

def perform(type, file) 
    case type 
    when "import_images" 
     file.each do |picture| 
      puts picture.class 
      puts picture.original_filename 
     end 
     Product.import_images(file) 
     puts "SIDEKIQ_WORKER: IMPORTING IMAGES" 
    end 
end 

イメージハッシュのハッシュを渡すにはどうすればよいですか?あるいは、私がしたいことをどのように達成することができますか?

その後、画像はモデルに処理されますが、ハッシュはすでに文字列に変換されていますが、機能しません。

def self.import_images(file) 
file.each do |picture| 
    @product = Product.where(code: File.basename(picture.original_filename, ".*")) 
    if([email protected]?) 
     @product.update(:image=> picture) 
    end 
    end 
end 

はあなたの助けをありがとう:)

+0

申し訳ありませんが、なぜsidekiqを使用していますか?あなただけのキャリアウェーブの複数の画像のアップロードでこれを行うことができます、これについての多くのガイドがあり、あなたはアマゾンs3のストレージにアップロードすることができます https://github.com/carrierwaveuploader/carrierwave#multiple-file-uploads https:// stackoverflow .co.jp/questions/19712816/carrierwave-rails-4-and-multiple-uploads –

+0

私はHerokuを使用していますが、アップロードされた画像の数に依存しない場合もあります。私はこれを第2の計画プロセスに入れる必要があります キャリアウェーブでこれを行うことはできますか?ありがとうございます:) –

+0

私はそれについて本当に知りません。ごめんなさい。 –

答えて

0

をので、私はちょうどそれを実現するために何をしたか...

を、ユーザーがファイルをアップロードした後、それはフォルダとAに保存しますコントローラ内の変数は各画像の名前を取得します。その後

when "Import images" 
    file = Array.new 
    params[:image].each do |picture| 
    File.open(Rails.root.join('public/system/products', 'uploaded', picture.original_filename), 'wb') do |f| 
     f.write(picture.read) 
    end 
    file.push picture.original_filename 
    end 
    SidekiqWorker.perform_async("import_images", file,0,0) 
    redirect_to products_url, notice: "#{t 'controllers.products.images'}" 

、それは私のsidekiq_workerに渡し、私は、画像を検索し、コードがイメージの名前に等しい製品を検索私のモデルに渡します。処理後は、アップロードされた画像のファイルを削除します:)

def self.import_images(file) 
file.each do |image| 
    uploaded = open("public/system/products/uploaded/"+image) 
    prd = Product.where(code: File.basename(uploaded, '.*')) 
    if !prd.nil? 
    prd.update(image: uploaded) 
    end 
    File.delete("public/system/products/uploaded/"+image) 
end 

エンド

関連する問題