Dan*_*ker 5 base64 ruby-on-rails carrierwave ember.js
我希望有人可以帮助我理解这一点.我有一个图像的base64字符串:
"data:image/jpeg;base64,/9j/4AAQSkZJRgABA..."
Run Code Online (Sandbox Code Playgroud)
我想使用ember的createRecord和commit()发送它:
this.get('store').createRecord(Emb.Painting, {name: newName, image: newImage});
Run Code Online (Sandbox Code Playgroud)
然后我想将它转换为StringIO for carrierwave并保存它:
StringIO.class_eval { def original_filename; "stringiohaxx.jpg"; end }
io = StringIO.new(Base64.decode64(params[:painting][:image]))
@painting = Painting.create(:name => params[:painting][:name], :image => io )
Run Code Online (Sandbox Code Playgroud)
图像已保存.图像总是被破坏.我是否需要将我的base64字符串分解为:
data: '/9j/..'
type: 'image/jpeg'
Run Code Online (Sandbox Code Playgroud)
?任何帮助赞赏.
是的,你需要拆分字符串.你可以使用这样的东西:
def splitBase64(uri)
if uri.match(%r{^data:(.*?);(.*?),(.*)$})
return {
type: $1, # "image/png"
encoder: $2, # "base64"
data: $3, # data string
extension: $1.split('/')[1] # "png"
}
end
end
Run Code Online (Sandbox Code Playgroud)
然后你可以解码图像......
base64image = params[:painting][:image]
imageDataString = splitBase64(base64image)[:data]
imageDataBinary = Base64.decode64(imageDataString)
Run Code Online (Sandbox Code Playgroud)
然后你可以将imageDataBinary传递给StringIO.new(),结果图像应该是有效的.
是的,该字符串确实需要被分解:
var data = newImage.split(',');
this.get('store').createRecord(Emb.Painting, {name: newName, image: data[1]});
Run Code Online (Sandbox Code Playgroud)
我怀疑这是最好的方法......
| 归档时间: |
|
| 查看次数: |
3926 次 |
| 最近记录: |