Google Forms文件上传完整示例

Tem*_*ora 36 file-upload google-apps-script google-forms

如何允许我的观看者使用Google表单将某些文件上传到我的表单并将其保存到我的Google云端硬盘?

我正在寻找一个完整的示例:它必须告诉要添加到示例Google Form HTML源代码的代码.如何使用Google Apps脚本将查看者的文件上传到我的Google云端硬盘帐户?

Ala*_*lls 62

更新:Google表单现在可以上传文件.此答案是在Google表单具有上传文件功能之前发布的.

此解决方案不使用Google表单.这是使用Apps脚本Web应用程序的一个示例,它与Google表单非常不同.Web App基本上是一个网站,但您无法为其获取域名.这不是Google表单的修改,无法上传文件.

:我确实有一个例子 UI服务和HTML服务,但是已经删除了UI服务示例,因为UI Service已被弃用.

注意:现在唯一可用的沙箱设置IFRAME.我想onsubmit在开始表单标签中使用一个属性: <form onsubmit="myFunctionName()">它可能导致表单在表单提交后从屏幕上消失.

如果您使用的是NATIVE模式,则文件上载Web App可能不再有效.使用NATIVE模式,表单提交不会调用页面从屏幕上消失的默认行为.如果您使用的是NATIVE模式,并且文件上载表单不再有效,那么您可能正在使用"提交"类型按钮.我猜你也可能正在使用"google.script.run"客户端API将数据发送到服务器.如果您希望在提交表单后页面从屏幕上消失,您可以采用其他方式.但你可能不在乎,甚至更喜欢让页面停留在屏幕上.根据您的需要,您需要以某种方式配置设置和代码.

如果您使用"提交"类型按钮,并希望继续使用它,则可以尝试event.preventDefault();在提交事件处理函数中添加代码.或者您需要使用google.script.run客户端API.


可以使用Apps脚本HTML服务创建用于将文件从用户计算机驱动器上传到Google云端硬盘的自定义表单.这个例子需要编写一个程序,但我在这里提供了所有的基本代码.

此示例显示了使用Google Apps脚本HTML服务的上传表单.

你需要什么

  • Google帐户
  • Google云端硬盘
  • Google Apps脚本 - 也称为Google脚本

Google Apps脚本

有多种方法可以在Google Apps脚本代码编辑器中结束.

我之所以提到这一点,是因为如果你不了解所有的可能性,那可能会有点混乱.Google Apps脚本可以嵌入Google网站,表格,文档或表单中,也可以作为独立应用使用.

应用脚本概述

这个例子是一个带有HTML服务的"Stand Alone"应用程序.

HTML服务 - 使用HTML,CSS和Javascript创建Web应用程序

Google Apps脚本中只有两种类型的文件Project:

  • 脚本
  • HTML

脚本文件有.gs扩展名.该.gs代码是用JavaScript编写服务器端代码,谷歌自己的API的组合.

  • 复制并粘贴以下代码
  • 保存
  • 创建第一个命名版本
  • 发布它
  • 设置权限

    你可以开始使用它了.

开始于:

  • 在Apps脚本中创建一个新的空白项目
  • 复制并粘贴此代码:

使用HTML服务上传文件:

Code.gs文件(默认创建)

//For this to work, you need a folder in your Google drive named:
// 'For Web Hosting'
// or change the hard coded folder name to the name of the folder
// you want the file written to

function doGet(e) {
  return HtmlService.createTemplateFromFile('Form')
    .evaluate() // evaluate MUST come before setting the Sandbox mode
    .setTitle('Name To Appear in Browser Tab')
    .setSandboxMode();//Defaults to IFRAME which is now the only mode available
}

function processForm(theForm) {
  var fileBlob = theForm.picToLoad;

  Logger.log("fileBlob Name: " + fileBlob.getName())
  Logger.log("fileBlob type: " + fileBlob.getContentType())
  Logger.log('fileBlob: ' + fileBlob);

  var fldrSssn = DriveApp.getFolderById(Your Folder ID);
    fldrSssn.createFile(fileBlob);

  return true;
}
Run Code Online (Sandbox Code Playgroud)

创建一个html文件:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <h1 id="main-heading">Main Heading</h1>
    <br/>
    <div id="formDiv">

      <form id="myForm">

        <input name="picToLoad" type="file" /><br/>
        <input type="button" value="Submit" onclick="picUploadJs(this.parentNode)" />

      </form>
    </div>


  <div id="status" style="display: none">
  <!-- div will be filled with innerHTML after form submission. -->
  Uploading. Please wait...
</div>

</body>
<script>

function picUploadJs(frmData) {

  document.getElementById('status').style.display = 'inline';

  google.script.run
    .withSuccessHandler(updateOutput)
    .processForm(frmData)
};
  // Javascript function called by "submit" button handler,
  // to show results.

  function updateOutput() {

    var outputDiv = document.getElementById('status');
    outputDiv.innerHTML = "The File was UPLOADED!";
  }

</script>
</html>
Run Code Online (Sandbox Code Playgroud)

这是一个完整的工作示例.它只有两个按钮和一个<div>元素,所以你在屏幕上看不到多少.如果.gs脚本成功,则返回true,并onSuccess运行一个函数.onSuccess函数(updateOutput)将内部HTML注入div元素,并显示消息"文件已上传!"

  • 保存文件,为项目命名
  • 使用菜单:File,Manage Version然后保存第一个版本
  • Publish,Deploy As Web App 然后更新

当您第一次运行脚本时,它将要求权限,因为它将文件保存到您的驱动器.在第一次授予权限后,Apps脚本会停止,并且无法完成运行.所以,你需要再次运行它.第一次使用后,脚本不会再次请求权限.

Apps脚本文件将显示在您的Google云端硬盘中.在Google云端硬盘中,您可以为谁可以访问和使用脚本设置权限.通过简单地向用户提供链接来运行脚本.像加载网页一样使用链接.

可以在StackOverflow上的此链接中看到使用HTML服务的另一个示例:

使用HTML服务上传文件

关于已弃用的UI服务的说明:

UI服务和getUi()电子表格类(或其他类)的Ui 方法之间存在差异2014年12月11日不推荐使用Apps脚本UI服务.它将继续工作一段时间,但你是鼓励使用HTML服务.

Google文档 - UI服务

即使UI服务弃用,有一个getUi()电子表格类添加的方法自定义菜单,这是弃用:

电子表格类 - 获取UI方法

我之所以提到这一点,可能会让人感到困惑,因为它们都使用了术语UI.

UI方法返回Ui返回类型.

您可以添加HTML的UI服务,但你不能使用<button>,<input><script>与UI服务的HTML标签.

以下是带有输入表单的共享Apps Script Web App文件的链接:

共享文件 - 联系表格

  • 当我运行代码时,它说..没有找到名为Form.html的HTML文件.(第7行,文件"") (4认同)
  • 您无法将其嵌入Google表单中.此代码适用于独立Web应用程序.您必须将项目发布为Web App.选择"发布",然后选择"部署为Web应用程序".这是一个HTML表单,而不是Google表单.Web App基本上类似于Web站点,但您无法将域名映射到URL. (4认同)
  • 这真的很好,很简单.非常感谢桑迪!但我仍然有一个问题:如何将此脚本嵌入Google表单?当我单击工具>脚本编辑器...它会打开一个新项目(我使用了您的代码),但我无法将其插入到我的表单中. (2认同)
  • 自定义HTML和CSS无法添加到Google表单中.客户端JavaScript也无法添加到Google表单中.您*可以*将Apps脚本Web应用程序嵌入到Google站点中. (2认同)
  • 为进一步阅读本文的人澄清这一点 - 您实际上无法将此示例与Google表单一起使用,但是您可以使用Google Site来从头开始完成整个工作吗? (2认同)