Я использую файл, загруженный из хранилища Gcloud в качестве приложения к API Mandrill для отправки в виде вложения по электронной почте. Проблема в том, что он работает только для текстового файла , но для изображения или Pdf вложение повреждено. Следующий код предназначен для загрузки файла и преобразования его в кодировку Base64.Изображение или Pdf загрузка файла из Gcloud Хранение повреждено
Storage.Objects.Get getObject = getService().objects().get(bucket, object);
ByteArrayOutputStream out = new ByteArrayOutputStream();
// If you're not in AppEngine, download the whole thing in one request, if possible.
getObject.getMediaHttpDownloader().setDirectDownloadEnabled(true);
getObject.executeMediaAndDownloadTo(out);
//log.info("Output: {}", out.toString("UTF-8"));
return Base64.encodeBase64URLSafeString(out.toString("UTF-8")
.getBytes(StandardCharsets.UTF_8));
Я устанавливаю эту строку в Содержимое MessageContent API Mandrill.
Поскольку MessageContent.Content ожидает строку, а не байт массива, я предполагаю, что вы передаете base64.encodeBase64URLSafeString (out.toString ("UTF-8")) в качестве MessageContent, но только с помощью GetBytes() здесь, чтобы проверить коррупция? – Adam
Да, это причина, почему я использую base64.encodeBase64URLSafeString, но я также попробовал Base64.encodeBase64URLSafeString (out.toByteArray()), который дает тот же результат. Повреждены только текстовые файлы. – pradex
Я считаю, что проблема заключается в загрузке полных данных за один раз. Потому что с большим количеством тестов я вижу, что большие текстовые файлы также не извлекают все данные, поскольку некоторые части повреждены. – pradex