所以我是Ruby的新手,但我想让一些类似的东西在本教程中工作,在本教程中,我将一个画布作为base64编码的图像传递,然后它会传回一个png以供下载。
http://www.intridea.com/blog/2013/1/9/downloadable-svg-in-png-format
我需要这样做才能支持IE9,但是我不能让上面教程中的代码示例工作,我对Ruby的了解也不够多。
这是前端的javascript。
pushToServer: ()->
html2canvas([$(".hidden_container")[0]],{
onrendered: (canvas)=>
strDataURI = canvas.toDataURL()
@temp_container.children().remove()
@temp_container.hide()
$.ajax
url: '/svg/create'
data: {svg: "#{strDataURI}"}
dataType: 'json'
type: 'POST'
success: (response, status, xhr) =>
window.location.href = "/downloadable/" + response.id + '.png'
error: (response, status)=>
console.log response
})和拼音代码
# routes.rb
match "downloadable/:id(.:format)", :to => 'svg#show'
# svg_controller.rb
class SvgController < ApplicationController
require "base64"
def show
@svg = Svg.where(id: params[:id]).first
respond_to do |format|
format.png {
headers['Content-type'] = 'image/png'
headers["Content-Disposition"] = "attachment; filename=\"chart.png\""
@result = Base64.decode64(@svg.content.gsub('data:image/png;base64,', ''))
render :text => @result
}
end
end
end对我来说,似乎需要一个ruby路由将初始的post请求从/svg/create路由到某个地方,但我真的不知道该怎么做。
任何帮助都是非常感谢的。谢谢。
发布于 2015-08-12 19:14:10
您确实需要另一个操作来接收来自Javascript的请求,将此添加到您的路由中:
match "/svg/create", :to => 'svg#show'我真的不确定#{strDataURI}到底是什么,但它一定是base64中的编码画布,解码只在显示操作中发生,所以在create中你唯一要做的就是检查参数svg是否被给定,并用它创建一个新的记录:
def create
return if not params[:svg]
svg = Svg.create(content: params[:svg])
render :json => svg
end我不知道您的SVG模型中是否有其他字段,如果没有,此代码可能会起作用!
https://stackoverflow.com/questions/31962835
复制相似问题