尝试将base64编码的.png
数据发送到控制器时,我遇到了一些有趣的行为。
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,但里面没有像素数据?
发生了什么事! (我已经验证过路由不问题。)
答案 0 :(得分:2)
你可以这样做:
png = Base64.decode64(params[:data].gsub(/\n/, '').gsub(' ', '+'))
说明:
Base64.decode64有时会在字符串中添加换行符,我们应该删除它们。
Rails用params中的空格替换+,将其替换为+。
遇到了同样的问题。这解决了我的问题。