Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过一次表单提交在一个文件夹中上载多个文件_Javascript_Html_Google Apps Script_Google Drive Api - Fatal编程技术网

Javascript 通过一次表单提交在一个文件夹中上载多个文件

Javascript 通过一次表单提交在一个文件夹中上载多个文件,javascript,html,google-apps-script,google-drive-api,Javascript,Html,Google Apps Script,Google Drive Api,我已经创建了一个自定义谷歌表单,允许登录谷歌的用户在表单中包含多个文件。 这些文件被上传到Google Drive中新创建的文件夹中。 Google脚本使用当前用户的电子邮件地址+当前日期和时间作为文件夹名称 问题和预期结果: 由于使用了forEach功能,脚本将每个文件上载到一个单独的文件夹中(使用相同的名称)。 我想将one表单提交的每个文件上传到one文件夹中 HTML: 谷歌脚本: 提交文件时,您希望在每次提交时创建一个新文件夹 您想将多个文件上载到创建的文件夹 如果我的理解是正确的

我已经创建了一个自定义谷歌表单,允许登录谷歌的用户在表单中包含多个文件。 这些文件被上传到Google Drive中新创建的文件夹中。 Google脚本使用当前用户的电子邮件地址+当前日期和时间作为文件夹名称

问题和预期结果: 由于使用了
forEach
功能,脚本将每个文件上载到一个单独的文件夹中(使用相同的名称)。 我想将one表单提交的每个文件上传到one文件夹中

HTML: 谷歌脚本:
  • 提交文件时,您希望在每次提交时创建一个新文件夹
  • 您想将多个文件上载到创建的文件夹
如果我的理解是正确的,这次修改怎么样?请把这看作是几个答案中的一个

修改的脚本: HTML: 请修改如下

<form id="myForm" target="hidden_iframe" onsubmit="submitted=true;">
发件人: 谷歌应用程序脚本: 我将
processForm()
分为
processForm()
createFolder()

注:
  • 在HTML中,顶行如下所示

    <form id="myForm" target="hidden_iframe" onsubmit="submitted=true;">
    
    
    
    从,如果您使用以下行,请更新您的问题。我想你正在使用下面的脚本

    <iframe name="hidden_iframe" id="hidden_iframe" style="display:none;" onload="if(submitted)  { picUploadJs(myForm); }"></iframe>
    <form id="myForm" action="https://docs.google.com/forms/d/e/xxx/formResponse" target="hidden_iframe" onsubmit="submitted=true;">
    
    
    

如果这不是你想要的结果,我道歉。

太好了!就这样,谢谢你。我已经在HTML部分添加了缺少的行。@Bldjef感谢您的回复和更新。我很高兴你的问题解决了。
<input name="picToLoad" type="file" id="sampleFile" />
<input name="picToLoad" type="file" id="files" multiple />
function picUploadJs(myForm) {
  const f = document.getElementById("files");
  google.script.run.withSuccessHandler((folderId) => { // Added
    var files = [...f.files];
    files.forEach((file, i) => {
      const fr = new FileReader();
      fr.onload = (e) => {
        const data = e.target.result.split(",");
        const obj = {fileName: file.name, mimeType: data[0].match(/:(\w.+);/)[1], data: data[1]};
        document.getElementById('status').style.display = 'inline';
        google.script.run.withSuccessHandler(() => {
          if (i == files.length - 1) updateOutput();
        }).processForm(obj, folderId); // Modified
      }
      fr.readAsDataURL(file);
    });
  }).createFolder();
}
// Added
function createFolder() {
  var dateTime = Utilities.formatDate(new Date(), "GMT+2", "dd-MM-yy_HH-mm");
  var email = Session.getActiveUser().getEmail();
  var parentFolder = DriveApp.getFolderById('xxxxx');
  var newFolder = parentFolder.createFolder(email + "_" + dateTime);
  var newFolderId = DriveApp.getFoldersByName(newFolder).next().getId();
  return newFolderId;
}

// Modified
function processForm(theForm, newFolderId) {
  var fileBlob = Utilities.newBlob(Utilities.base64Decode(theForm.data), theForm.mimeType, theForm.fileName);
  var fldrSssn = DriveApp.getFolderById(newFolderId);
  fldrSssn.createFile(fileBlob);
  return true;
}
<form id="myForm" target="hidden_iframe" onsubmit="submitted=true;">
<iframe name="hidden_iframe" id="hidden_iframe" style="display:none;" onload="if(submitted)  { picUploadJs(myForm); }"></iframe>
<form id="myForm" action="https://docs.google.com/forms/d/e/xxx/formResponse" target="hidden_iframe" onsubmit="submitted=true;">