使用 HtmlService 使用 Google Apps 脚本上传文件

Posted

技术标签:

【中文标题】使用 HtmlService 使用 Google Apps 脚本上传文件【英文标题】:Uploading file using Google Apps Script using HtmlService 【发布时间】:2013-03-18 05:10:07 【问题描述】:

如何将文件上传到 Google Drive? 我想使用谷歌应用脚​​本 - htmlservice 创建一个网络应用。 我不知道如何将 html 中的表单指向现有的 google app 脚本。 我很难在谷歌文档中找到一个正确的例子。

我发现了数百个使用 UI 的示例,但根据 https://developers.google.com/apps-script/sunset,它很快就会被弃用。 先感谢您! 亚努斯

<html>
<body>
<form>
   <input type="file"/>
   <input type="button">
</form>
</body>
</html>

脚本

function doGet() 
  return HtmlService.createHtmlOutputFromFile('myPage');


function fileUploadTest()

   var fileBlob = e.parameter.upload;
      var adoc = DocsList.createFile(fileBlob);
      return adoc.getUrl();

【问题讨论】:

GUI builder 将被弃用(以及 UiApp 中的一些小部件),但 UiApp 本身不会...... 请注意,UiApp 的其余部分并未弃用,将继续运行。尽管如此,我们还是建议您将您的用户界面迁移到 Html 服务,从长远来看,这将提供功能和支持的最佳组合。 【参考方案1】:

我找到了问题的答案。

Submit a Form using Google App Script's HtmlService

下面的 Google App Script 链接中的代码是:

function doGet(e) 
  var template = HtmlService.createTemplateFromFile('Form.html');
  template.action = ScriptApp.getService().getUrl();
  return template.evaluate();


function doPost(e) 
  var template = HtmlService.createTemplateFromFile('Thanks.html');
  template.name = e.parameter.name;
  template.comment = e.parameter.comment;
  template.screenshot = e.parameter.screenshot;
  return template.evaluate();

https://script.google.com/d/1i65oG_ymE1lreHtB6WBGaPHi3oLD_-wPd5Ter1nsN7maFAWgUA9DbE4C/edit

谢谢!

【讨论】:

【参考方案2】:

让按钮使用 google.script.run 运行服务器端函数,将整个表单作为唯一参数传递。 (在按钮的 onClick 内部,'this' 是按钮,所以 'this.parentNode' 是表单。)确保为文件输入命名。

<html>
<body>
<form>
   <input type="file" name="theFile">
   <input type="hidden" name="anExample">
   <input type="button" onclick="google.script.run.serverFunc(this.parentNode)">
</form>
</body>
</html>

在服务器上,让您的表单处理函数采用一个参数 - 表单本身。来自客户端代码的 HTML 表单将被转换为一个等效的 javascript 对象,其中所有命名字段都是字符串属性,除了将是 blob 的文件。

function doGet() 
  return HtmlService.createHtmlOutputFromFile('myPage');


function serverFunc(theForm) 
   var anExampleText = theForm.anExample;  // This is a string
   var fileBlob = theForm.theFile;         // This is a Blob.
   var adoc = DocsList.createFile(fileBlob);    
   return adoc.getUrl();

如果您确实想使用您正在生成和返回的 URL,请务必在 google.script 调用中添加成功处理程序。你可以这样修改:

// Defined somewhere before the form
function handler(url) 
  // Do something with the url.


<input type="button" onclick=
  "google.script.run.withSuccessHandler(handler).serverFunc(this.parentNode)">

【讨论】:

当我查看 fileBlob 时,它只是 10 个字节的文本 - “FileUpload”。你知道我错过了什么吗?【参考方案3】:

尝试:返回 HtmlService.createTemplateFromFile('myPage').evaluate(); 更多:html service reference

【讨论】:

以上是关于使用 HtmlService 使用 Google Apps 脚本上传文件的主要内容,如果未能解决你的问题,请参考以下文章

使用模板变量作为脚本 src 的一部分

在反应中注册服务人员

onclick 功能自动运行

web Server

按内容选择元素,并删除其内容的第一个和最后一个字符

提交谷歌表单时发送电子邮件