【问题标题】:Download Folder as Zip Google Drive API将文件夹下载为 Zip Google Drive API
【发布时间】:2019-05-24 17:46:15
【问题描述】:

我目前在 Google Sheet 中有一个 Google App Script,它为我提供了一个文件夹的 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
}

【问题讨论】:

  • 我为我糟糕的英语水平道歉。可以问一下I would like to remove, and get the URL of the zipped content directly.的详细情况吗?
  • @Tanaike tempFolder.getUrl() 给了我驱动器文件夹的 URL。当我到达这个 URL 时,我必须单击文件夹上的“下载”,然后它会以 zip 格式下载。我想跳过这一步,直接获取ZIP文件的url。
  • 试试webContentLink
  • @Dave 感谢您的回复。不幸的是,我还不能理解你的目标。对不起。那我能问一下你的回复吗? 1.click "Download" on the folder是什么意思? 2、skip this step 中的this step 是什么? 3. 您想将文件夹中的所有文件下载为 zip 文件。我的理解正确吗?
  • @pa1.Shetty 我刚刚在文件夹上尝试了googleapis.com/drive/v2/files/folderId,但响应不包含 webContentLink

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


【解决方案1】:
  • 您希望将文件夹中的所有文件压缩为 zip 文件。
    • 该文件夹没有子文件夹。
    • 所有文件都只是文本文件。
    • 所有文件的总大小小于 50 MB。
  • 您要检索用于下载 zip 文件的 URL。

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

  1. 检索文件夹。
  2. 检索文件夹中所有文件的 blob。
  3. 压缩 blob 并检索 zip 的 blob。
  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 文件,请分享该文件。

参考:

【讨论】:

  • 谢谢,您的解决方案确实有效,但是有一个主要问题,如果我没有以拥有该驱动器的用户作为用户 #1 登录,那么它会说“我们很抱歉,但是您无权访问此页面。”我有很多谷歌帐户,所以大部分时间用户将是#2 或#3
  • @Dave 感谢您的回复。我为我糟糕的英语水平道歉。当您想从其他帐户下载 zip 文件时(这些其他帐户已登录 Google。),创建的 zip 文件需要与其他帐户共享。当您想在不登录 Google 的情况下下载 zip 文件时,创建的 zip 文件需要公开共享。
  • 我已登录,但用户并未作为主用户登录,而是作为用户 #2 登录。
  • @Dave 我为我糟糕的英语水平道歉。不幸的是,我无法从您的回复评论中了解您的情况。那么您可以通过包含更多信息作为新问题来发布它吗?这样,包括我在内的用户都可以想到你的情况。我想正确理解它。很抱歉,我无法很快解决您的新问题。如果您能合作解决您的问题,我很高兴。
  • 创建 2 个谷歌帐户。使用两个帐户登录。现在你有账户#1,账户#2。如果您使用帐户 #2 创建下载链接并尝试下载,则会显示“很抱歉,您无权访问此页面”。因为它只查看帐户 #1。
猜你喜欢
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
相关资源
最近更新 更多