将文件夹下载为Zip Google Drive API

时间:2019-05-24 17:46:15

标签: google-apps-script google-drive-api

我目前在Google表格中有一个Google App脚本,该脚本可以为我提供文件夹的URL,然后可以使用该URL下载。虽然这是一个额外的步骤,但我想删除它,并直接获取压缩内容的URL。

这是我的代码(谷歌应用程序脚本):

function downloadSelectedScripts() {
  // ...
  var scriptFiles = getScriptFiles(scriptFileNames)
  var tempFolder = copyFilesToTempFolder(scriptFiles)
  Browser.msgBox(tempFolder.getUrl())
}

function copyFilesToTempFolder(files) {
  var tempFolder = DriveApp.getFolderById(FOLDERS.TEMP)
  var tempSubFolder = tempFolder.createFolder('download_' + Date.now())

  for (var i in files) {
    var file = files[i]
    file.makeCopy(file.getName(), tempSubFolder)
  }

  return tempSubFolder
}

1 个答案:

答案 0 :(得分:1)

  • 您想将文件夹中的所有文件压缩为zip文件。
    • 该文件夹没有子文件夹。
    • 所有文件都是纯文本文件。
    • 所有文件的总大小小于50 MB。
  • 您要检索用于下载zip文件的URL。

如果我的理解是正确的,那么该示例脚本如何?该脚本的流程如下。

  1. 检索文件夹。
  2. 检索文件夹中所有文件的斑点。
  3. 压缩blob并获取zip文件。
  4. 创建一个zip blob作为文件。
  5. 获取下载URL。

示例脚本:

使用此脚本时,请设置要压缩的文件夹的文件夹ID。

function myFunction() {
  var folderId = "###"; // Please set the folder ID here.

  var folder = DriveApp.getFolderById(folderId);
  var files = folder.getFiles();
  var blobs = [];
  while (files.hasNext()) {
    blobs.push(files.next().getBlob());
  }
  var zipBlob = Utilities.zip(blobs, folder.getName() + ".zip");
  var fileId = DriveApp.createFile(zipBlob).getId();
  var url = "https://drive.google.com/uc?export=download&id=" + fileId;
  Logger.log(url);
}

结果:

按如下所示返回zip文件的直接链接。

https://drive.google.com/uc?export=download&id=###

注意:

  • 很遗憾,在当前阶段,不能使用Google Apps脚本将文件夹包含在zip数据中。
  • 在此示例脚本中,zip文件的文件名是文件夹名称。因此,请根据您的情况进行修改。
  • 如果要在不登录Google的情况下下载zip文件,请共享该文件。

参考: