javascript - 匿名 Google 云端硬盘上传创建新文件夹

标签 javascript file-upload google-apps-script

我正在使用发现的 Google Apps 脚本 here让匿名用户将文件上传到我的 Google 云端硬盘。

我想要的是脚本使用表单上输入的名称创建一个文件夹,然后将文件存放在该文件夹中。

到目前为止,我已经以某种方式让它工作了(我想我应该提到我不知道我在做什么)。

我还希望脚本检查该文件夹是否已存在,然后将新文件存放在该文件夹中。

示例:Bobby 将 file1 上传到文件夹“Bobby”。然后他返回并上传 file2。 File2 也应保存在文件夹“Bobby”中。

现在,脚本正在检查文件夹名称,当它发现该文件夹已创建时,它将文件存储在根文件夹“Uploads”中,而不是文件夹“Bobby”中。

如何让脚本将同一用户的其他文件存入用户的现有文件夹中,而无需创建新文件夹且无需保存到根文件夹?

这是我现在正在处理的事情:(我有没有提到我不知道我在做什么?)

function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('form.html');

}

function uploadFiles(form) {

  try {

    var upload = "Uploads";
    var folder, folders = DriveApp.getFoldersByName(upload);

    if (folders.hasNext()) {
      folder = folders.next();
    } else {
      folder = DriveApp.createFolder(upload);
    }

    var blob = form.file;
    var name = form.name;

    var filefolder, filefolders = DriveApp.getFoldersByName(name);

    if (filefolders.hasNext()) {
      filefolder = filefolders.next();
      var file = folder.createFile(blob);
      file.setDescription("Uploaded by " + name);
    } else {
      var file = folder.createFolder(name).createFile(blob);
      file.setDescription("Uploaded by " + name);
    }

    return "File uploaded successfully " + file.getUrl();

  } catch (error) {

    return error.toString();
  }

}
<!doctype html>
<style type="text/css">
  * {
    font-family: "Verdana";
  }
  
  body {
    background-color: #EEEEEE;
  }
  
  .container {
    margin: 0 auto;
    display: block;
    width: 50%;
  }
  
  #myForm {
    width: 50%;
    margin: 0 auto;
    background: #f4d03f;
    border-radius: 10px;
    box-shadow: 5px 5px 10px #aaa;
    padding: 20px;
    color: #fff;
  }
  
  .inputname {
    display: inline-block;
    height: 30px;
    width: 300px;
    padding: 5px;
    border: none;
    text-align: center;
    background-color: #eee;
  }
  
  .inputname:hover {
    background: #fff;
    box-shadow: 0 0 15px #777;
    transition: 0.2s;
  }
  
  .inputfile {
    width: 0.1px;
    height: 0.1px;
    opacity: 0;
    overflow: hidden;
    position: absolute;
    z-index: -1;
  }
  
  .inputfile+label,
  .inputsubmit {
    color: #fff;
    font-size: 1.25em;
    font-weight: 700;
    display: inline-block;
    background-color: #2abb9b;
    padding: 20px;
    cursor: pointer;
    border: none;
    border-radius: 3px;
  }
  
  .inputfile:focus+label,
  .inputfile+label:hover,
  .inputsubmit:hover {
    background-color: #87D37C;
    box-shadow: 0 0 15px #777;
    transition: 0.2s;
  }
</style>

<div class="container" align="center">
  <form id="myForm" align="center">
    <h1>Teacher Mike's Google Drive</h1>
    <h2>Upload Files Below</h2>
    <hr>
    <input type="text" class="inputname" name="name" placeholder="Your nickname..">
    <!--<input type="file" class="file" name="myFile">
            <label for="myFile">Choose a File</label>-->
    <input type="file" name="file" id="file" class="inputfile" />
    <label for="file">Choose a file</label>
    <input type="submit" class="inputsubmit" value="Upload File" onclick="this.value='Uploading..';
                    google.script.run.withSuccessHandler(fileUploaded)
                    .uploadFiles(this.parentNode);
                    return false;">
    <hr>
  </form>
  <div id="output"></div>
  <script>
    function fileUploaded(status) {
      document.getElementById('myForm').style.display = 'none';
      document.getElementById('output').innerHTML = status;
    }
  </script>
  <style>
    input {
      display: block;
      margin: 20px;
    }
  </style>
</div>

提前致谢!

附:文件上传成功后是否可以打开该文件夹?

最佳答案

我认为同一用户上传文件时,保存文件的文件夹可能是错误的。请修改

来自:

if (filefolders.hasNext()) {
  filefolder = filefolders.next();
  var file = folder.createFile(blob);
  file.setDescription("Uploaded by " + name);
} else {
  var file = folder.createFolder(name).createFile(blob);
  file.setDescription("Uploaded by " + name);
}

致:

if (filefolders.hasNext()) {
  filefolder = filefolders.next();
  var file = filefolder.createFile(blob); // <--- Here
  file.setDescription("Uploaded by " + name);
} else {
  var file = folder.createFolder(name).createFile(blob);
  file.setDescription("Uploaded by " + name);
}

如果这个问题没有得到解决,我很抱歉。

关于javascript - 匿名 Google 云端硬盘上传创建新文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45864012/

相关文章:

javascript - 使 img 的 css 属性宽度和高度无效(不能使用 "auto")

javascript - 无法在有限时间内执行脚本

c# - 有什么方法可以让我在上传文件时继续访问网站?

file-upload - 在 yii2 的非对象上调用成员函数 saveAs()

google-apps-script - 如何使用 Google Apps 脚本合并 'Google Slide' 中的 2 个表格单元格

google-apps-script - Utilities.formatDate 显示错误的日期 - 日期格式不正确

javascript - Google 表格仅查看对运行应用脚本的用户的保护

javascript - 如何以编程方式添加 ng-models 供以后使用

javascript - 未陷入 promise

javascript - Nodejs 中的 mobx : observe array of primitives