【问题标题】:How to save multiple file upload in a specific folder?如何将多个文件上传保存在特定文件夹中?
【发布时间】:2019-07-09 12:10:06
【问题描述】:

我在 Google 表单上创建了一个自定义表单,其中包含一个上传文件问题(允许多个文件)。我正在尝试在提交表单时运行一个脚本,该表单在云端硬盘中的特定目标中创建一个文件夹,并保存上传到该文件夹​​中的文件。但我不知道如何检索上传文件的 ID 并将它们移动到新文件夹中。 谢谢

我设法创建了新文件夹,但我无法选择上传的文件并将它们保存(或移动)到目标文件夹。我没有发布创建文件夹的代码。

function onFormSubmit(e) {
  var form = FormApp.getActiveForm();
  var formResponses = form.getResponses();
  var formResponse = formResponses[formResponses.length-1];
  var itemResponses = formResponse.getItemResponses();
  var itemResponse = itemResponses[1];
  var uploadedfile = itemResponse.getResponse();

  //now??
}

我想获取文件的 ID,但使用 .getItem().getID() 方法我得到类似 1.148501776E9 另外如何循环浏览上传的文件?

【问题讨论】:

    标签: google-apps-script upload google-forms multiple-file-upload


    【解决方案1】:
    • 通过 Google 表单上传文件时,您希望将上传的文件移动到特定文件夹。
    • 您已经为onFormSubmit() 安装了 OnSubmit 事件触发器。
    • 您已经拥有目标文件夹的文件夹 ID。

    如果我的理解是正确的,那么这个修改呢?请认为这只是几个答案之一。

    修改点:

    修改脚本:

    在使用此脚本之前,请将目标文件夹 ID 设置为var folderId = "###"

    当您修改脚本时,请删除一次 OnSubmit 事件触发器并重新安装触发器。那时,如果显示授权屏幕。请授权。这样,脚本就可以工作了。请注意这一点。

    function onFormSubmit(e) {
      var form = FormApp.getActiveForm();
      var formResponses = form.getResponses();
      var formResponse = formResponses[formResponses.length-1];
      var itemResponses = formResponse.getItemResponses();
    
      // I modified below script.
      Utilities.sleep(3000);
    
      var folderId = "###";  // Please set folder ID of the destination folder.
    
      var destfolder = DriveApp.getFolderById(folderId);
      for (var i = 0; i < itemResponses.length; i++) {
        if (itemResponses[i].getItem().getType() == "FILE_UPLOAD") {
          var ids = itemResponses[i].getResponse();
          for (var j = 0; j < ids.length; j++) {
            var file = DriveApp.getFileById(ids[j]);
            destfolder.addFile(file);
            file.getParents().next().removeFile(file);
          }
        }
      }
    }
    

    注意:

    • 在我的测试案例中,当Utilities.sleep(3000)未被使用时,由于在文件上传未完成之前试图移动文件而发生错误。所以我把它。如果在您的环境中,没有它不会发生错误,请删除它。

    参考资料:

    如果我误解了您的问题并且这不是您想要的结果,我深表歉意。

    【讨论】:

    • 非常感谢,非常完美。我没有使用睡眠功能,因为它似乎没有它工作
    • @E. Tocchi 谢谢你的回复。很高兴您的问题得到解决。
    • 你好,我正在寻找解决这个问题的方法,碰巧找到了这个页面。我已复制代码并更新了文件夹 ID。但是当我提交它时,它不会运行该功能。有没有我必须调用函数的地方?
    • @Kyle 我想支持你。但是从I have copied the codes and have updated the folder ID. But when I submit it, it does not run the function. Is there a place where I have to call the function?,我无法理解你现在的情况。这是因为我的技术不好。我对此深表歉意。那么,您能否通过包含复制您的问题的详细信息将您当前的问题作为新问题发布?我认为通过这种方式,它将帮助用户思考解决方案。如果您能合作解决您的问题,我很高兴。
    【解决方案2】:

    Google 以下列方式存储上传的文件:

    1. 它会创建一个文件夹"Placeholder_for_Name_of_the_Form"(File responses) 和子文件夹:"Placeholder_for_Name_of_Question"(File responses) 并将所有上传的文件存储在那里。
    2. 如果您将表单链接到电子表格,电子表格将包含上传文件的 URL(其中包含 ID)作为问题的答案。您也可以使用 Apps 脚本以编程方式访问这些数据(相关方法:openSpreadsheetbyId()getRage()getValues(),...)。

    如果您想在与onFormSubmit() 不同的时间点检索数据,此信息可能对您有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多