我正在使用canvg库将谷歌图表保存为图片。更多关于此过程的信息可以在这个页面上找到。
好的,JS框架提供了编码后的图片数据,我使用表单和隐藏字段进行POST,从而触发下载。
HTML代码:
好的,JS框架提供了编码后的图片数据,我使用表单和隐藏字段进行POST,从而触发下载。
HTML代码:
<form accept-charset="UTF-8" action="<%= rest_png_path %>" id="png_hidden" method="post">
<input id="image_data_input" name="image_data" type="hidden" value="" />
<input id="graph_container_div" type="hidden" value="gauge_div" />
<input class="btn " name="commit" type="submit" value="Grafik" />
</form>
JS代码
$('#png_hidden').submit(function() {
container_div = $('#graph_container_div').val();
// saveAsImg method - returns image data base64 encoded.
// in background there is this part of code
// return imgData.replace("image/png", "image/octet-stream");
// I tried both version, with replace and without it
data = saveAsImg(document.getElementById(container_div));
$('#image_data_input').val(data);
return true;
});
最后的控制器代码将响应POST请求并触发下载。
def deliver_png
#send_data ActiveSupport::Base64.decode64(params['image_data']),
send_data params['image_data'],
#:type =>'image/png',
:type =>'image/png',
:disposition => "attachment; filename=graf.png"
end
正如您所看到的,我已经尝试了几个标题选项。问题是下载的图像已经损坏。我通过HexEditor打开它并发现它没有PNG标头,但我对此一无所知。希望您能帮忙。
enctype="multipart/form-data"
。 - Mike Szyndel