我无法在Google Apps脚本参考中找到答案,因此我要问:您是否可以通过Google脚本中的.run()函数传递blob。我的代码如下。
这是我的HTML文件的脚本。所有HTML包含的都是一个对象。并且
制作" print"声明。
<script>
var canvas = document.getElementById('myCanvas');
var can = canvas.getContext("2d");
can.fillRect(20,20,150,100);
var canvasData = canvas.toDataURL('image/png', 1);
var blob = toBlob(canvasData);
document.getElementById('ins').innerHTML = "Got the Blob " + blob.type;
google.script.run.printCanvas(blob);
function toBlob(dataURI) {
// convert base64 to raw binary data held in a string
// doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this
document.getElementById('ins').innerHTML = ("Data URI:" + dataURI);
var byteString = atob(dataURI.split(',')[1]);
// separate out the mime component
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]
// write the bytes of the string to an ArrayBuffer
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
// write the ArrayBuffer to a blob, and you're done
var blob = new Blob([ab], {type: 'image/png'});
return blob;
}
</script>
&#34; print&#34; blob.type,给我&#34;得到Blob图像/ png&#34;
然而,应用程序不会执行.run(blob),错误代码:
&#34;未捕获的TypeError:由于属性中的非法值而失败:0&#34;
我知道GAS不会通过DIV,所以我想知道是否只是不可能将blob传递给.gs文件。我无法弄清楚为什么应用程序不会运行。如果有可能,请告诉我如何。
我知道它不是.gs方面,因为.gs的第一行是DocumentApp.alert,它不会弹出。因此,应用程序未到达.gs文件。
答案 0 :(得分:1)
所以,谢谢Sandy Good。事实上,答案是否定的。如上所述,不可能将blob发送到.gs页面。
但是,您可以将blob编码为base-64编码的字符串
https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL
然后使用Utilities.base64Decode(base64encodedstring)在.gs文件中解码它;