使用回形针上传base64编码图像 - Rails

问题描述 投票:0回答:2

使用cropit我通过参数在rails上获取图像bas64编码。

  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,
并且在创建临时文件时我创建了 jpg
Tempfile.new(['image', '.jpg'])
。那么我该如何处理 jpg、jpeg 和 png 的最佳实践呢?

ruby-on-rails ruby amazon-s3 paperclip
2个回答
1
投票

这是我的解决方案,使用Paperclip.io_adapters.for(image),其中图像是base64字符串。

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

0
投票

做同样的事情,但是在控制器中:

signature = Paperclip.io_adapters.for(params[:base64])
signature.original_filename = params[:filename]
Media::Image.create(
  image: signature,
  ...
)
© www.soinside.com 2019 - 2024. All rights reserved.