В настоящее время у меня есть скрипт 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
}
@Tanaike tempFolder.getUrl() дает мне URL-адрес папки на диске. Когда я перехожу по этому URL-адресу, мне нужно нажать «Загрузить» в папке, после чего она загружается как zip. Я хотел бы пропустить этот шаг и получить URL-адрес ZIP-файла напрямую.
Попробуйте webContentLink
@ Дэйв Спасибо за ответ. К сожалению, я пока не могу понять вашу цель. Мне жаль. Итак, могу я спросить вас о вашем ответе? 1. Что значит click "Download" on the folder? 2. Что такое this step из skip this step? 3. Вы хотите загрузить все файлы в папке в виде zip-файла. Правильно ли я понимаю?
@ pa1.Shetty Я только что попробовал googleapis.com/drive/v2/files/folderId для папки, и ответ не содержит webContentLink.
@Tanaike да, я хочу скачать все файлы в папке в виде zip с помощью API
@ Дэйв Спасибо за ответ. Я мог понять о вашей цели. Чтобы подумать над решением вашей задачи, у меня есть несколько вопросов. 1. Сколько общий размер всех файлов в папке? 2. Есть ли в папке подпапки? 3. Когда документы Google (электронная таблица, документ, слайды и т. д.) включены в папку, что вы хотите сделать?
@Tanaike нет подпапок. Файлы представляют собой небольшие файлы .txt. Нет файлов гугл документов
@ Дэйв Спасибо за ответ. Я думал, что могу подтвердить вашу ситуацию. Поэтому я предложил образец сценария в качестве ответа. Не могли бы вы подтвердить это? Если я неправильно понял ваш вопрос, и это не тот результат, который вы хотите, я извиняюсь.





Если я правильно понимаю, как насчет этого примера сценария? Поток этого сценария выглядит следующим образом.
Когда вы используете этот скрипт, установите идентификатор папки, которую вы хотите сжать.
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=###
Спасибо, ваше решение действительно работает, но есть одна серьезная проблема: если я не вошел в систему с пользователем, которому принадлежит диск, как пользователь № 1, тогда он говорит: «Извините, но у вас нет доступа к этой странице. " У меня много учетных записей Google, поэтому большую часть времени пользователь будет №2 или №3.
@ Дэйв Спасибо за ответ. Прошу прощения за мое плохое знание английского. Если вы хотите загрузить zip-файл из других учетных записей (эти другие учетные записи зарегистрированы в Google), необходимо предоставить доступ к созданному zip-файлу другим учетным записям. Если вы хотите загрузить zip-файл без входа в Google, созданный zip-файл должен быть общедоступным.
Я вошел в систему, но пользователь вошел в систему не как основной, а как пользователь №2.
@ Дэйв, я извиняюсь за плохое знание английского. К сожалению, я не мог понять о вашей ситуации из вашего ответного комментария. Итак, вы можете опубликовать его, включив дополнительную информацию в качестве нового вопроса? Таким образом, пользователи, включая меня, могут подумать о вашей ситуации. Я хотел бы правильно понять об этом. Прошу прощения, что не смог ответить на ваш новый вопрос в ближайшее время. Если вы можете сотрудничать, чтобы решить вашу проблему, я рад.
Заведите 2 гугл-аккаунта. Войдите в обе учетные записи. Теперь у вас есть аккаунт №1, аккаунт №2. Если вы создадите ссылку для скачивания, используя учетную запись № 2, и попытаетесь скачать, она скажет: «Извините, но у вас нет доступа к этой странице». потому что он смотрит только на учетную запись № 1.
@Dave О твой новый вопрос я прокомментировал это в мой первый комментарий. Но из вашего ответного комментария я подумал, что это бесполезно для вашей ситуации. Поэтому я не мог понять вашу цель и предложил опубликовать ее как новый вопрос. Причина, по которой я не смог решить ваш новый вопрос, связана с моим плохим мастерством. Мне очень жаль.
Прошу прощения за мое плохое знание английского. Могу я спросить вас о деталях
I would like to remove, and get the URL of the zipped content directly.?