Rails POST base64图像数据

时间:2014-09-26 15:20:25

标签: ruby-on-rails ruby macos

尝试将base64编码的.png数据发送到控制器时,我遇到了一些有趣的行为。

my_controller.rb

def post_the_data
  require 'base64'

  return render :json => {
    :success => false,
    :message => 'you need to specify the data and module parameter.'
  } unless params[:data] && params[:module]

  file = "#{Rails.root}/public/pics/pics#{params[:module]}.png"

  png = Base64.decode64(params[:data])

  File.open(file, 'wb') { |f| f << png }

  if File.exist?(file)
    render :json => {
      :success => true
    }
  else
    render :json => {
      :success => false,
      :message => 'something went wrong when saving ' + file
    }
  end
end

在我的shell中,我正在执行100x100px image并执行:

curl --data "module=HI&data=`cat ~/Pictures/yo.png | base64`" http://localhost:3000/api/pics/pics

将我的yo.png(上面链接的网址)转换为base64

然后我做了open workspace/rails4dashboard/qa-dashboard/public/pics/picsHI.png

有趣的是,当我执行它时,它会打开文件,但它是空白的!图片是100x100,但里面没有像素数据?

发生了什么事! (我已经验证过路由问题。)

1 个答案:

答案 0 :(得分:2)

你可以这样做:

png = Base64.decode64(params[:data].gsub(/\n/, '').gsub(' ', '+'))

说明:

Base64.decode64有时会在字符串中添加换行符,我们应该删除它们。

Rails用params中的空格替换+,将其替换为+。

遇到了同样的问题。这解决了我的问题。