9

如何将文件上传到谷歌驱动器?我想使用谷歌应用脚​​本 - 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();
}
4

3 回答 3

15

让按钮使用 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)">
于 2013-04-03T14:51:52.293 回答
0

尝试:返回 HtmlService.createTemplateFromFile('myPage').evaluate(); 更多:html服务参考

于 2013-03-28T12:37:02.750 回答
0

我找到了我的问题的答案。

使用 Google App Script 的 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

谢谢!

于 2013-03-28T15:15:03.180 回答