Как загрузить файлы на диск с помощью AppsScript и Promises, чтобы гарантировать, что файл был загружен до получения идеJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Гость
 Как загрузить файлы на диск с помощью AppsScript и Promises, чтобы гарантировать, что файл был загружен до получения иде

Сообщение Гость »


Извините за плохой английский текст ;(

Я изо всех сил пытался создать функцию загрузки файла, которая использовала бы обещания для загрузки, а затем возвращала идентификатор файла.

Раньше я проводил пару исследований, и многие из них сработали нормально! Но когда я отправляю проект в производство, он вообще не работает.

Что мне нужно: функция, которая загружает файл на Google Диск, а затем возвращает идентификатор файла. Зная идентификатор файла, я смогу позже выполнить поиск на Google Диске и использовать этот файл в качестве вложения в MailApp.

Мой код:

function setupFileUrl(fileContent, fileName) { пусть contentType = fileContent.substring(5, fileContent.indexOf(';')); let bytes = Utilities.base64Decode(fileContent.substr(fileContent.indexOf('base64,') + 7)); пусть файл = Utilities.newBlob(bytes, contentType, fileName); пытаться { const addFile = sendFile(файл); вернуть [addedFile.getUrl(), addFile.getId()] } поймать (е) { пусть logSheet = SpreadsheetApp.openById(appSpreadsheetID).getSheetByName("журнал"); logSheet.appendRow([new Date(), user, e, "setupFileUrl при создании файла"]); вернуть е } } Это одна из многих попыток написания кода, которые я предпринял, но все они снова и снова возвращают одну и ту же проблему.

Каждый, кто пытался загрузить файл, создает в моем журнале запись, в которой говорится: Исключение: К сожалению, произошла ошибка сервера. Пожалуйста, подождите немного и повторите попытку. Исключение: неверный аргумент: id

Я понял, что происходит то, что идентификатор запрашивается без ожидания процесса загрузки, поэтому я попытался сделать это с помощью промисов, но промисы возвращают пустой объект "{}" вместо идентификатора файл.

function sendFilewithPromise(base64Data, nomeArq) { const SplitBase = base64Data.split(','), type = SplitBase[0].split(';')[0].replace('data:',''); const byteCharacters = Utilities.base64Decode(splitBase[1]); const ss = Utilities.newBlob(byteCharacters, type); ss.setName(nomeArq); вернуть новое обещание((разрешить,отклонить) =>{ пытаться{ папка const = DriveApp.getFolderById(driveFolderID) константный файл =folder.createFile(ss) разрешить (file.getId()) } поймать (ошибка) { отклонить (ошибка); } }).then(res => res.getId()) .then(uploadedFile => {return uploadedFile}) .catch((e) => { пусть logSheet = SpreadsheetApp.openById(appSpreadsheetID).getSheetByName("журнал"); logSheet.appendRow([new Date(), user, e, "setupFileUrl при чтении идентификатора и URL-адреса файла"]); вернуть е }) } Кто-нибудь знает, как это решить?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»