如何在.run函数

时间:2016-06-23 16:23:33

标签: javascript google-apps-script blob

我无法在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文件。

1 个答案:

答案 0 :(得分:1)

所以,谢谢Sandy Good。事实上,答案是否定的。如上所述,不可能将blob发送到.gs页面。

但是,您可以将blob编码为base-64编码的字符串

https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL

然后使用Utilities.base64Decode(base64encodedstring)在.gs文件中解码它;