Скачать папку как Zip API Google Диска

В настоящее время у меня есть скрипт Google App в Google Sheet, который дает мне URL-адрес папки, которую я затем могу использовать для загрузки. Хотя это дополнительный шаг, который я хотел бы удалить, и напрямую получить URL-адрес заархивированного содержимого.

Вот мой код (скрипт приложения Google):

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 25.05.2019 00:13

@Tanaike tempFolder.getUrl() дает мне URL-адрес папки на диске. Когда я перехожу по этому URL-адресу, мне нужно нажать «Загрузить» в папке, после чего она загружается как zip. Я хотел бы пропустить этот шаг и получить URL-адрес ZIP-файла напрямую.

Dave 25.05.2019 08:19

Попробуйте webContentLink

pa1.Shetty 25.05.2019 09:15

@ Дэйв Спасибо за ответ. К сожалению, я пока не могу понять вашу цель. Мне жаль. Итак, могу я спросить вас о вашем ответе? 1. Что значит click "Download" on the folder? 2. Что такое this step из skip this step? 3. Вы хотите загрузить все файлы в папке в виде zip-файла. Правильно ли я понимаю?

Tanaike 25.05.2019 10:00

@ pa1.Shetty Я только что попробовал googleapis.com/drive/v2/files/folderId для папки, и ответ не содержит webContentLink.

Dave 25.05.2019 16:53

@Tanaike да, я хочу скачать все файлы в папке в виде zip с помощью API

Dave 25.05.2019 16:53

@ Дэйв Спасибо за ответ. Я мог понять о вашей цели. Чтобы подумать над решением вашей задачи, у меня есть несколько вопросов. 1. Сколько общий размер всех файлов в папке? 2. Есть ли в папке подпапки? 3. Когда документы Google (электронная таблица, документ, слайды и т. д.) включены в папку, что вы хотите сделать?

Tanaike 26.05.2019 01:17

@Tanaike нет подпапок. Файлы представляют собой небольшие файлы .txt. Нет файлов гугл документов

Dave 26.05.2019 10:26

@ Дэйв Спасибо за ответ. Я думал, что могу подтвердить вашу ситуацию. Поэтому я предложил образец сценария в качестве ответа. Не могли бы вы подтвердить это? Если я неправильно понял ваш вопрос, и это не тот результат, который вы хотите, я извиняюсь.

Tanaike 26.05.2019 10:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
9
4 701
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • Вы хотите сжать все файлы в папке в виде zip-файла.
    • Папка не имеет подпапок.
    • Все файлы являются только текстовыми файлами.
    • Общий размер всех файлов не превышает 50 МБ.
  • Вы хотите получить URL-адрес для загрузки zip-файла.

Если я правильно понимаю, как насчет этого примера сценария? Поток этого сценария выглядит следующим образом.

  1. Получить папку.
  2. Получить большие двоичные объекты всех файлов в папке.
  3. Сжатие больших двоичных объектов и извлечение большого двоичного файла zip.
  4. Создайте ZIP-BLOB-объект в виде файла.
  5. Получить URL для загрузки.

Пример сценария:

Когда вы используете этот скрипт, установите идентификатор папки, которую вы хотите сжать.

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=###

Примечание:

  • К сожалению, на текущем этапе папки не могут быть включены в zip-данные с помощью скрипта Google Apps.
  • В этом примере скрипта имя файла zip-файла — это имя папки. Поэтому, пожалуйста, измените его для вашей ситуации.
  • Если вы хотите загрузить zip-файл без входа в Google, поделитесь файлом.

Ссылка:

Спасибо, ваше решение действительно работает, но есть одна серьезная проблема: если я не вошел в систему с пользователем, которому принадлежит диск, как пользователь № 1, тогда он говорит: «Извините, но у вас нет доступа к этой странице. " У меня много учетных записей Google, поэтому большую часть времени пользователь будет №2 или №3.

Dave 27.05.2019 10:05

@ Дэйв Спасибо за ответ. Прошу прощения за мое плохое знание английского. Если вы хотите загрузить zip-файл из других учетных записей (эти другие учетные записи зарегистрированы в Google), необходимо предоставить доступ к созданному zip-файлу другим учетным записям. Если вы хотите загрузить zip-файл без входа в Google, созданный zip-файл должен быть общедоступным.

Tanaike 27.05.2019 10:18

Я вошел в систему, но пользователь вошел в систему не как основной, а как пользователь №2.

Dave 27.05.2019 10:20

@ Дэйв, я извиняюсь за плохое знание английского. К сожалению, я не мог понять о вашей ситуации из вашего ответного комментария. Итак, вы можете опубликовать его, включив дополнительную информацию в качестве нового вопроса? Таким образом, пользователи, включая меня, могут подумать о вашей ситуации. Я хотел бы правильно понять об этом. Прошу прощения, что не смог ответить на ваш новый вопрос в ближайшее время. Если вы можете сотрудничать, чтобы решить вашу проблему, я рад.

Tanaike 27.05.2019 10:24

Заведите 2 гугл-аккаунта. Войдите в обе учетные записи. Теперь у вас есть аккаунт №1, аккаунт №2. Если вы создадите ссылку для скачивания, используя учетную запись № 2, и попытаетесь скачать, она скажет: «Извините, но у вас нет доступа к этой странице». потому что он смотрит только на учетную запись № 1.

Dave 27.05.2019 10:29

@Dave О твой новый вопрос я прокомментировал это в мой первый комментарий. Но из вашего ответного комментария я подумал, что это бесполезно для вашей ситуации. Поэтому я не мог понять вашу цель и предложил опубликовать ее как новый вопрос. Причина, по которой я не смог решить ваш новый вопрос, связана с моим плохим мастерством. Мне очень жаль.

Tanaike 27.05.2019 10:37

Другие вопросы по теме