使用回形针上传 base64 编码图像 - Rails
Upload base64 encoded image with paperclip - Rails
使用 cropit 我通过参数在 rails 上获得图像 bas64 编码。
image = params['image'].gsub('data:image/jpeg;base64,', '')
decoded_file = Base64.decode64(image)
然后我用回形针保存到 amazon 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 的最佳实践呢?
这是我的解决方案,使用 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
使用 cropit 我通过参数在 rails 上获得图像 bas64 编码。
image = params['image'].gsub('data:image/jpeg;base64,', '')
decoded_file = Base64.decode64(image)
然后我用回形针保存到 amazon 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 的最佳实践呢?
这是我的解决方案,使用 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