Файл, загруженный в Amazon S3 из сценария Google apps, поврежден

#amazon-web-services #amazon-s3 #google-apps-script #google-docs-api

Вопрос:

Я пытаюсь загрузить текущий активный документ из сценария Google apps в Amazon S3 с помощью кода ниже https://github.com/eschultink/S3-for-Google-Apps-Script и инструкции https://engetc.com/projects/amazon-s3-api-binding-for-google-apps-script/

Загрузка файла в Amazon S3 прошла успешно, но «Не удалось загрузить PDF-документ». при открытии файла из S3. Похоже, файл был поврежден во время загрузки в

 S3 var blob = DocumentApp.getActiveDocument().getAs('application/pdf');   
var s3 = new S3('XXXXX', 'XXXX');   
s3.putObject("bucket", blob.getName(), blob, {logRequests:true}); 
 

Комментарии:

1. s3 не определен

2. Почему вы используете сторонний API поверх AWS SDK, например AWS SDK для JavaScript?

3. Я пытаюсь запустить это в скрипте Google apps, и мне нужна только служба S3, поэтому я выбрал эту стороннюю библиотеку.

4. S3 определен, и загрузка работает, но при попытке доступа к загруженному файлу он выдает «Не удалось загрузить PDF-документ».

Ответ №1:

Я, следуя инструкциям в этом вопросе, могу решить проблему. https://github.com/eschultink/S3-for-Google-Apps-Script/issues/8

Изменения, которые необходимо внести, заключаются в

S3.gs строка 142: изменить запрос.setContent(object.getDataAsString()); на запрос.setContent(объект);

S3Request.gs строка 60: удалите строку, если (тип содержимого != ‘строка’) выбросить «содержимое должно быть передано в виде строки»

S3Request.gs строка 393: замените функцию следующей:

 S3Request.prototype.hexEncodedHash = function(string) {
  if(typeof string === "string")
    return this.hex(Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, string, Utilities.Charset.UTF_8));
  else
    return this.hex(Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, string.getBytes()));
}