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文字列(まだパラメーターに含まれている)を保存すると、クラッシュが発生しました。実際、私が驚いたのは、このコードがPaperclip2.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 に答える