2017-12-29 4 views
0

다음과 같이 작동하는 프로필 사진 업로드를하려고합니다. 사용자가 자신의 컴퓨터에서 업로드하려는 프로필 사진 (carrierwave)을 선택할 수 있습니다. 그는 Whatsapp (내가 사용하는 carrierwave-crop-on-fly)와 같이 1 : 1의 정사각형 비율로 좋아하며 마지막으로 자른 그림은 Cloudinary을 통해 클라우드에 업로드되고 내 모델 "사용자"의 "이미지"열에 바인드됩니다. . 나는 통합을 위해 cloudinary's tutorial을 따라 갔다.Carrierwave Cloudn 통합 Ruby on Rails

내가 지금까지했던 일이 여기에있다. 내가 그 프로필 그림을 변경할 수 있습니다 내보기에서

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

: 사용자 모델에서

class AvatarUploader < CarrierWave::Uploader::Base 

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

    def public_id 
    model.nombre 
    end 
end 

:

.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를 나타납니다 여기에 cloudinary와 바인더 제본 업 로더입니다 변경, 즉 이미지 검사시)

마지막으로 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' 

을 통화 PARAMS : (I는 같은 이름을 가진 두 개의 PARAMS를 추측 할 수있다

#<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"}}> 

는 문제가 될 수 있지만, 나는 그것이 작동하도록 변경하는 방법을 몰라 내가 왜 "예상 해시를 이해하지 못하는 해시있어) "문제가있다

답변

0

나는"차에 익숙하지 않은 동안 rierwave-crop-on-fly "를 사용하는 경우이를 다르게 수행하는 것이 좋습니다. 또한 Cloudinary는 즉시 제공되는 업로드 위젯 (https://cloudinary.com/documentation/upload_widget)을 제공하며 클라이언트 쪽 자르기 수행도 지원합니다. 다음은 테스트 할 수있는 기본의 RoR/CarrierWave/Cloudinary's - 업로드 - 위젯 샘플 프로젝트입니다 : https://github.com/taragano/Carrierwave_widget

이 프로젝트는 현재 자르기 기능을 제외 있지만 쉽게 제공 문서 페이지를 참조 추가 할 수 있습니다. 위젯에서 설정할 수있는 매개 변수 중 하나는 cropping_aspect_ratio이며 도움이 될 수 있습니다.

또한 위젯을 사용하면 클라이언트 쪽에서 자르기 작업이 수행되므로 업로드 속도가 빨라지고 서버가 자르기를 처리 할 필요가 없습니다.