簡體   English   中英

Carrierwave Cloudinary集成Ruby on Rails

[英]Carrierwave Cloudinary integration Ruby on Rails

我正在嘗試進行某種個人資料圖片上傳,如下所示:用戶可以從計算機上選擇想要上傳的個人資料圖片( 載波 ),然后他可以根據自己的喜好使用正方形的縱橫比進行裁剪1:1,就像在Whatsapp中一樣(我使用carrierwave-crop-on-fly ),最后將裁剪后的圖片通過Cloudinary上傳到雲中,並將其綁定到模型“用戶”的“圖片”列中。 我按照cloudinary的教程進行了整合

到目前為止,這是我所做的。 這是與cloudinary綁定的上載器:

class AvatarUploader < CarrierWave::Uploader::Base

  include Cloudinary::CarrierWave
  include CarrierWave::MiniMagick
  process crop: [100, 100]

  def public_id
    model.nombre
  end
end

在用戶模型中:

class User < ActiveRecord::Base
  mount_uploader :image, AvatarUploader
  ...

我認為可以在其中更改個人資料照片:

.well
  .row-fluid
    .span8.offset2
      %p
        .inline-block
          = form_for @user, method: :post, url: change_photo_self_url do |f|
            = f.file_field :image
            .hidden#cropbox= f.cropbox :image, width: 300, height: 300
            = f.submit "Crop", class: "btn btn-success blanco"
            ...

(#cropbox在file_field更改時,即在檢查圖像時出現)

最后,在users_controller中

...
    def change_photo
      user = current_user
      user.update_attributes(user_params)
      sign_in(user)
      redirect_to profile_url
    end
    private
      def user_params
        params.require(:user).permit(..., :image)
    end

沒有“裁剪”的情況,一切工作正常。 也就是說,我實現了用戶可以選擇一個圖像然后上傳它,並且一切正常。 但是,當我添加裁剪控件時,它崩潰了。 當我選擇圖像時,會出現裁剪表面,我可以完美地選擇它,但是當我單擊“提交”按鈕“裁剪”時,在達到控制器動作之前就會觸發以下錯誤:

Rack::QueryParser::ParameterTypeError at /change_photo
expected Hash (got Hash) for param `image'

這是通話的參數:

#<Rack::QueryParser::Params:0x396f9f0 @limit=65536, @size=5, @params={"image"=>{:filename=>"140.jpg", :type=>"image/jpeg", :name=>"user[image]", :tempfile=>#<Tempfile:C:/Users/josem/AppData/Local/Temp/RackMultipart20171229-7548-15105ol.jpg>, :head=>"Content-Disposition: form-data; name=\"user[image]\"; filename=\"140.jpg\"\r\nContent-Type: image/jpeg\r\n"}}>

我可能會猜到兩個具有相同名稱的參數可能是一個問題,但是我不知道如何對其進行更改以使其起作用,並且我也不理解為什么“預期的哈希(哈希)”是一個問題

雖然我對“ carrierwave-crop-on-fly”不太熟悉,但您可能需要考慮以不同的方式來完成。 Cloudinary還提供了開箱即用的上載小部件( https://cloudinary.com/documentation/upload_widget ),它還支持執行客戶端裁剪。 這是您可以測試的基本RoR / CarrierWave / Cloudinary's-Upload-widget示例項目: https : //github.com/taragano/Carrierwave_widget

該項目當前不包括裁剪功能,但可以輕松添加,請參閱提供的文檔頁面。 您可以在小部件上設置的參數之一是cropping_aspect_ratio ,它可能對您有所幫助。

另外,請注意,使用小部件,裁剪將在客戶端完成,這不僅有助於加快上傳速度,而且服務器也不需要處理裁剪。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM