0

从回形针 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=”的处理程序

有人遇到过这个问题吗?

谢谢

4

1 回答 1

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
于 2012-12-08T07:31:10.847 回答