ruby-on-rails - 上传多张图片

标签 ruby-on-rails paperclip dropzone.js

我在使用 dropzone.js 上传多个图像时遇到问题

我收到此错误:

Paperclip::AdapterRegistry::NoHandlerError (No handler found for "0"):

这是我使用 dropzone 提交表单时参数的外观

Processing by CarsController#create as JSON
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ND6DrphXI6sYZ+IGZd8HllyGR/74PbmBsyRCHqsRZO2BpgVNLCqJpkokW57pQ5lVaPm9AVzredrHNg9Lc8y1eQ==", "car"=>{„brand”=>"Audi ", "model"=>"A6"}, "null"=>"", "commit"=>"Create Car", "images"=>{"0"=>#<ActionDispatch::Http::UploadedFile:0x007fc42bcc4308 @tempfile=#<Tempfile:/var/folders/f5/x2w5mbln30q9q70f1mqxy3hc0000gn/T/RackMultipart20170926-645-1hajljx.png>, @original_filename=„car.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"images[0]\"; filename=\”car.png\"\r\nContent-Type: image/png\r\n">}}

并且没有拖放区

Processing by CarsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"Pwp4IlmBXuaKN8GZ5TGckKpxRlpteKtsGqgVPE/rK3yKkv7B7fz063h0eAFprQJTmxe8pcm+azduullplzbz7A==", "car"=>{„brand”=>"Audi ", "model"=>"A6"}, "images"=>[#<ActionDispatch::Http::UploadedFile:0x007fc428b41b50 @tempfile=#<Tempfile:/var/folders/f5/x2w5mbln30q9q70f1mqxy3hc0000gn/T/RackMultipart20170925-645-sxrzzm.png>, @original_filename=„car.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"images[]\"; filename=\”car.png\"\r\nContent-Type: image/png\r\n">], "commit"=>"Create Car"}

没有 dropzone 一切正常。

这是我的表格

<%= form_with(model: car, local: true, :html => {:multipart => true, :class => "dropzone", :id => 'myAwesomeDropzone'}) do |form| %>


<%= file_field_tag "images[]", multiple: true %>

<%= form.submit :id => „submit” %>


<% end %>

拖放区设置

 Dropzone.options.myAwesomeDropzone = { 
      autoProcessQueue: false,
      uploadMultiple: true,
      parallelUploads: 100,
      paramName: "images",
      maxFiles: 100,

      init: function() {
        var myDropzone = this;

        this.element.querySelector(„#submit”).addEventListener("click", function(e) {
          e.preventDefault();
          e.stopPropagation();
          myDropzone.processQueue();
        });

      }

    }

汽车 Controller

  def create
     @car = Car.new(car_params)
      respond_to do |format|
      if @car.save
         if params[:images]
          params[:images].each { |image|
            @car.pictures.create(image: image)
          }
        end

        format.html { redirect_to @car, notice: 'Car was successfully created.' }
        format.json { render :show, status: :created, location: @car }
      else
        format.html { render :new }
        format.json { render json: @car.errors, status: :unprocessable_entity }
      end
    end
  end

图片模型

class Picture < ApplicationRecord

belongs_to :car
  has_attached_file :image, :processors => [:watermark],
                    :styles => { 
                                 :thumb => '150x150>', 
                                 :original => { :geometry => '1920x1080#', :watermark_path => "#{Rails.root}/public/images/logo.png" } 
                               },
                    :url    => '/assets/attachment/:id/:style/:basename.:extension',
                    :path   => ':rails_root/public/assets/attachment/:id/:style/:basename.:extension',
                    :default_url => "/images/:style/mising.png"
validates_attachment :image,
  content_type: { content_type: ["image/jpeg", "image/gif", "image/png"] }
end

我不知道如何解决这个问题,我指望你的帮助

最佳答案

似乎自从您使用 dropzone 以来,参数就从文件数组更改为哈希值,其中键是文件。一个简单的转换就可以解决您的问题:

params[:images].each do |_i, image|
  @car.pictures.create(image: image)
end

我刚刚更改了 each 循环以迭代哈希而不是数组。这也可以工作:

params[:images].keys.each do |image|
  @car.pictures.create(image: image)
end

关于ruby-on-rails - 上传多张图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46433597/

相关文章:

ruby-on-rails - 回形针背景个人资料图片上传到 s3 并进行部分处理

javascript - 加载表单后初始化 dropzone

ruby-on-rails - 如何在rails Devise gem中为单个用户关联多个电子邮件

ruby-on-rails - 可以捕获调试器语句的 ruby​​ 代码质量检查器

html - 音频中的内容与报道的内容不符 - 回形针

ruby-on-rails - 如何使用重新处理将已上传的回形针图像调整为 s3? ( rails )

javascript - ASP.NET MVC 中的拖放区错误消息

javascript - 禁用 dropzone 页面刷新

ruby-on-rails - 如何在 ruby​​ on Rails 中获取 5 篇浏览次数最多的文章

ruby-on-rails - Spork/Autotest 不自动获取更改