Я верю вашей ситуации и цели следующим образом.
- В вашей ситуации данные base64 изображения могут быть загружены. Но загруженные данные - это не изображение. Это строковые данные.
- В вашей цели вы хотите загрузить файл изображения общедоступного изображения, используя URL-адрес изображения.
Для этого, как насчет этого ответа?
Проблема и обходное решение:
Когда я увидел скрипт «S3-for-Google-Apps-Script», кажется, что URL-адрес нельзя напрямую использовать для s3.putObject()
. И введенный BLOB-объект преобразуется в тип строки с помощью getDataAsString()
. Я думаю, что это является причиной вашей проблемы.
В этом ответе я хотел бы предложить изменить библиотеку GAS "S3-for-Google-Apps-Script" для использования массива байтов для payload
.
Использование:
Сначала скопируйте проект GAS S3-для-Google-Apps-Script и измените его следующим образом.
Модифицированный скрипт:
О S3.prototype.putObject
в файле S3.gs
, пожалуйста, измените его следующим образом.
От:
request.setContent(object.getDataAsString());
До:
request.setContent(object.getBytes());
И, о S3Request.prototype.setContent
в файле S3Request.gs
, пожалуйста, измените его следующим образом.
С:
if (typeof content != 'string') throw 'content must be passed as a string'
До:
// if (typeof content != 'string') throw 'content must be passed as a string'
И, о S3Request.prototype.getContentMd5_
в файле S3Request.gs
, пожалуйста, измените следующим образом .
С:
return Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, this.content, Utilities.Charset.UTF_8));
Кому:
return Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, this.content));
Пример сценария:
И, для вышеуказанного измененного сценария, пожалуйста, проверьте следующий сценарий.
const imageUrl = "###"; // Please set the image URL.
const s3 = S3.getInstance(awsAccessKeyId, awsSecretKey); // Please set them.
const imageBlob = UrlFetchApp.fetch(imageUrl).getBlob();
s3.putObject(bucketName, 'test.png', imageBlob, { logRequests:true });