我正在使用从Gcloud存储中下载的文件作为Mandrill API的附件,以附件形式通过电子邮件发送。问题是它仅适用于文本文件,但对于图像或Pdf,附件已损坏。
以下代码用于下载文件并将其转换为Base64编码的String。

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));


我在Mandrill API的MessageContent的内容中设置此字符串。

最佳答案

得到它的工作。在将它用作电子邮件的附件之前,只需要将OutputStream存储在临时文件中即可。在下面发布代码以供参考。

Storage.Objects.Get getObject = storage.objects().get("bucket", "object");

OutputStream out = new FileOutputStream("/tmp/object");
// If you're not in AppEngine, download the whole thing in one request, if possible.
getObject.getMediaHttpDownloader().setDirectDownloadEnabled(true);
getObject.executeMediaAndDownloadTo(out);

09-27 09:57