2016-02-25 74 views
-1

我有一個API,我從以Base64角客戶端發送一個形象,我爲我的方法下一個代碼創建:如何將所有屬性設置爲UploadedFile的Rails中4

if params[:profile][:picture] 
     picture_params = params[:profile][:picture] 


     #Create new Temporal File 
     temp_file = Tempfile.new("file_to_upload") 
     temp_file.binmode 
     temp_file.write(Base64.decode64(picture_params["body"])) 

     #Create a new uploaded file 
       uploaded_file = ActionDispatch::Http::UploadedFile.new(
       :tempfile => temp_file, 
       :original_filename => picture_params[:name]) 

     #After replace picture with the new uploaded file 
     params[:profile][:picture] = uploaded_file 
     Rails.logger.info "#{params[:profile]}" 
    end 

    @profile = @current_user.build_profile(profile_params) 
    if @profile.save 
     render "api/v1/profiles/show" 
    else 
     errors_array!(@profile.errors.full_messages, :unprocessable_entity) 
    end 

時後,我打印我的PARAMS的信息是零

"picture"=>#<ActionDispatch::Http::UploadedFile:0x007f872daac5b0 @tempfile=#<Tempfile:/var/folders/nx/30024wp17ggfgw542lyzs4zw0000gn/T/file_to_upload20160225-14952-by947r>, @original_filename=nil, @content_type=nil, @headers=nil>} 

當嘗試創建我有下一個錯誤的配置文件後,我認爲這是對以前的問題

NoMethodError (undefined method `gsub' for nil:NilClass): 
app/controllers/api/v1/profiles_controller.rb:39:in `create' 

我使用Rails中上傳文件回形針寶石觀看4.2.5.1

回答

1

謝謝,但有一個解決方案,我改變了我的方法:

def set_selfies(selfie_params) 
     picture_params = selfie_params 
     encoded_picture = picture_params[:body] 
     content_type = picture_params[:content_type] 
     image = Paperclip.io_adapters.for("#{encoded_picture}") 
     image.original_filename = picture_params[:name] 
     image 
    end 

I Read this Blog: ,這一切,對我的作品,謝謝:D

相關問題