2015-10-07 3 views
0

Использование cropit Я получаю изображение bas64, закодированное на рельсах через параметры.Загрузить base64 закодированное изображение с помощью paperclip - Rails

image = params['image'].gsub('data:image/jpeg;base64,', '') 
    decoded_file = Base64.decode64(image) 

, а затем я сохранить амазонка s3 с скрепкой

begin 
    file = Tempfile.new(['image', '.jpg']) 
    file.binmode 
    file.write decoded_file 
    unless params['image_id'] 
     media_img = Media::Image.new() 
     media_img.image = file 
     if media_img.save 
     render json: {status: 'success'} 
     else 
     render json: {status: 'error'} 
     end 
    else 
     img = Media::Image.find(params['image_id']) 
     img.update_attribute(:image, file) 
     img.update_attribute(:name, params['image_name']) 
     render json: {status: 'success'} 
    end 
    file.close 
    ensure 
    file.unlink 
    end 

Основная проблема заключается в том, что код работает только в формате JPEG изображений, потому что я использую GSUB только для data:image/jpeg;base64, и при создании TempFile я создал jpg Tempfile.new(['image', '.jpg']). Итак, как я могу справиться с лучшей практикой jpg, jpeg и png?

ответ

0

Это мое решение, используя Paperclip.io_adapters.for (изображение), где изображение - это base64 string.

def create_image image, image_name, cat 
    signature = Paperclip.io_adapters.for(image) 
    base_name = File.basename(image_name,File.extname(image_name)) 
    signature.original_filename = "#{base_name}.jpg" 
    media_img = Media::Image.new() 
    media_img.image = signature 
    media_img.company_id = current_company_id 
    media_img.type = cat 
    media_img.save 
end 
Смежные вопросы