从 Gcloud Storage 下载的图像或 Pdf 文件已损坏
Image or Pdf File download from Gcloud Storage is corrupted
我正在使用从 Gcloud 存储下载的文件作为 Mandrill 的附件 API 作为电子邮件附件发送。问题是它仅适用于文本文件,但对于图像或 Pdf,附件已损坏。
以下代码用于下载文件并将其转换为 Base64 编码的字符串。
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);
我正在使用从 Gcloud 存储下载的文件作为 Mandrill 的附件 API 作为电子邮件附件发送。问题是它仅适用于文本文件,但对于图像或 Pdf,附件已损坏。 以下代码用于下载文件并将其转换为 Base64 编码的字符串。
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);