Paperclip使用base64照片抛出NoHandlerError

时间:2012-11-27 16:14:56

标签: ios ruby-on-rails api paperclip

从回形针2升级到回形针3时,我的图像上传API制动。这段代码曾经工作过:

def decode_cover_image_data(cover_image_data)
    data = StringIO.new(Base64.decode64(cover_image_data))
    data.class.class_eval { attr_accessor :original_filename, :content_type }
    data.original_filename = "cover.png"
    data.content_type = "image/png"

    self.photo = data
end

现在它引发了NoHandleError异常:

  

“Paperclip :: AdapterRegistry :: NoHandlerError(找不到处理程序   “/ 9J / 4AAQD / 4Q [...] wooooGf / 9K =”

有人遇到过这个问题吗?

由于

1 个答案:

答案 0 :(得分:1)

我发现了问题的来源,这是非常愚蠢的......

在我的控制器更新方法中,我有类似的内容:

  def update
    ...
    if p[:photo]
      @user_ipad.decode_cover_image_data(p[:photo])
    end

    unless @user_ipad.update_attributes(p)
      render :json => {:errors => @user_ipad.errors}
    end
  end

问题是我正在设置用户照片2次:

  • 进入@ user_ipad.decode_cover_image_data(p [:photo])
  • 进入@ user_ipad.update_attributes(p)

使用update_attributes保存base64字符串(仍在参数中)时发生崩溃。实际上让我感到惊讶的是,这段代码适用于Paperclip 2.4.5 ...

升级到Paperclip 3.3.1后,我用以下方法替换了我的更新方法解决了我的问题:

  def update
    ...
    if p[:photo]
      p[:photo] = @user_ipad.decode_cover_image_data(p[:photo])
    end

    unless @user_ipad.update_attributes(p)
      render :json => {:errors => @user_ipad.errors}
    end
  end