У меня были некоторые противоречивые результаты при использовании GAS для настройки общего доступа к файлам, созданным в сценарии, из загруженного большого двоичного объекта.Gobally, сценарий GAS обслуживает Html-форму, собирает загруженный файл и выполняет некоторую регистрацию и обработку.Это сильно измененная версия этой https://ctrlq.org/code/19747-google-forms-upload-files, адаптированная для представления отчетов от студентов.
Единственные подсказки, которые у меня есть, связаны с положением линии, которая устанавливает совместное использование, относительноСтроки, в которых создается файл:
var folder = DriveApp.getFolderById(dropbox);
// Get the blob
var contentType = data.substring(5,data.indexOf(';'))
var bytes = Utilities.base64Decode(data.substr(data.indexOf('base64,')+7))
var blob = Utilities.newBlob(bytes, contentType, filename)
// Create a folder for the file if it does not exist
try{
var subFolder = folder.getFolder(tp);
}
catch(e) {
var subFolder = folder.createFolder(tp);
}
var file = subFolder.createFile(blob) // Create the file
С этого момента происходят странные вещи.Я сузил проблему до фактической строки, которая устанавливает совместное использование:
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW)
Если это происходит сразу после создания файла, это работает только несколько раз.Было отправлено более 200 отчетов, и ~ 50% из них видны всем, у кого есть ссылка, а остальные доступны только для частного использования.
Независимо от того, установлены эти разрешения или нет, все остальное завершается успешно.Поэтому у меня нет журнала ошибок, чтобы точно знать, что происходит.
Перемещая эту строку в конец функции, последующие представления правильно установили права доступа:
// .... processing lines that include logging to a spreadsheet, sending emails, and setting other permissions.
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW)
return "OK";
MyПредполагается, что по какой-то причине время между созданием файла и изменением разрешения влияет на эффективность строки .setSharing ().
Одна из гипотез состоит в том, что файл может наследовать разрешения родительской папки (что непубличный) с "лагом".Другими словами, права доступа, установленные функцией .setSharing (), будут перезаписаны какой-то небезопасной функцией наследования за строкой создания файла:
var file = subFolder.createFile(blob) // Create the file
Разрешения «по умолчанию» обязательно должны быть установлены в какой-то момент, ноя не знаю известной мне функции "сброса", которая заставляла бы или ждала, чтобы это произошло (например, та, которая используется в таблицах Google).
РЕДАКТИРОВАТЬ: я нашел поток, в котором похож "недетерминизм"происходит, включая наследование разрешений из родительской папки (см. эту проблему ).
Я хотел бы знать, как убедиться, что разрешения всегда установлены правильно.
Ура :) 1031 *