AppScript:如何创建上传表单?

我正在使用AppScript开发Gmail附加组件。 我的目标是创建类似于下图的内容。有提示吗?

AppScript:如何创建上传表单?

lawdragon 回答:AppScript:如何创建上传表单?

问题

在Gmail附件中上传文件。简而言之-不完全是。 Gmail附加组件使用CardService类来构建Ui-它没有file输入类型,也没有任何拖放功能。但是有一种解决方法。

第1步。创建触发器小部件

然后,确保您的Card包含一个CardSectionImageButtonTextButton小部件的KeyValue且其操作集为OpenLink在他们。使用setUrl(url)方法设置URL以在单击小部件时打开时,请使用可以通过ScriptApp.getService().getUrl()调用动态访问的当前项目的URL(在同时部署为WebApp和附件时)。

第2步。创建文件提交表单

在附加项目中,创建一个处理文件上传的HTML文件。您可以使用示例之一或创建自己的实现。该示例文件使用FileReader Web API处理提交的文件(请注意,Google Apps Script中的客户端到服务器通信要求阻止submit事件处理程序,并通过{{1}调用服务器端函数}仅API)。

goolge.script.run

第3步。设置doGet()

在您的WebApp代码中,添加所需的<!DOCTYPE html> <html> <head> <base target="_top"> </head> <body> <form> <input name="file" type="file" /> <button id="submit" type="submit">Save file</button> </form> <script> var form = document.forms[0]; form.addEventListener('submit',(event) => { event.preventDefault(); var file = form.elements[0].files[0]; var reader = new FileReader(); reader.readAsArrayBuffer(file); reader.onload = () => { var buffer = reader.result; var data = Array.from(new Int8Array(buffer)); google.script.run.withSuccessHandler((server) => { top.window.close(); }).saveFile(data,file.name,file.type); }; }); </script> </body> </html>函数,该函数将显示我们在第2步中创建的文件上传表单。它可以像几行代码一样简单(只需确保返回html doGet()解析的文件):

HtmlService

第4步。处理文件上传

在WebApp代码中,添加将接收文件数据的处理程序(此示例假定您将其读取为byte [],有关详细信息,请参见步骤2)。

function doGet() {
  var html = HtmlService.createHtmlOutputFromFile('file name from step 2');
  return html;
}

第5步。部署为WebApp

最后,您将必须将附加组件同时部署为WebApp(或捆绑在一起)和一个附加组件。假设您已经为附加组件配置了清单,请转到“发布”菜单,选择“作为Web应用程序部署”,创建一个部署并允许任何人访问。

注释

  1. 此方法不允许您轻松更新Ui以显示上传了哪些文件,但是您可以向function saveFile(upload,name,mime) { var blob = Utilities.newBlob(upload,mime,name); var file = DriveApp.createFile(blob); Logger.log(file.getUrl()) //test upload; //handle file as needed; return; } 添加一个withSuccessHandler()调用,以成功在服务器端处理上传的文件用窗体关闭窗口,将状态信息保存到缓存/用户属性。然后,如果将google.script.run的{​​{1}}属性设置为OpenLink(请参阅步骤1),则可以有条件地更新Ui,以通知用户上传成功。
  2. 更新:在Tanaike发表评论后,我对uload流程进行了改进,以更好地处理文件:将已读为OnClose的二进制字符串文件更改为RELOAD_ADD_ON并以{{1 }}实例。
  3. 当前问题是上传了ArrayBuffer个文件(尽管传输正确)。解决后将更新答案。

参考

  1. Int8Arrayreference;
  2. 在MDN上
  3. Array Web API reference
  4. .g*方法referenceOpenLink类);
  5. GAS guide中的客户端到服务器通信;
  6. 在GAS guide中创建和提供HTML;
  7. Web应用guide;
本文链接:https://www.f2er.com/3155661.html

大家都在问