如何解决将 S3 签名 URL Pdf 作为电子邮件附件发送
我正在尝试将 S3
pdf 文档作为电子邮件附件发送。我使用文档的签名 URL 并构建 MimeBodyPart
,如下所示。
Multipart multipart = new MimeMultipart();
// have another MimeBodyPart for text/html content
BodyPart attachment = new MimeBodyPart();
attachment.setDataHandler(new DataHandler(new URLDataSource(attachmentUrl)));
attachment.setFileName(<filename>);
attachment.setdisposition(MimeBodyPart.ATTACHMENT);
attachment.setContent(<filename>,"application/pdf");
multipart.addBodyPart(attachment)
我面临的问题是附件已成功附加但没有任何内容。我的意思是它总是 1KB。并且无法打开/查看任何内容。
仅 pdf
文件就面临上述问题。但是,如果我提供一些图片 URL 并删除 setContent
,setdisposition
一切都会按预期工作。
附加此 URL 中的图像时
Content-Type: image/png; name=googlelogo_color_272x92dp.png
Content-transfer-encoding: base64
Content-disposition: attachment; filename=googlelogo_color_272x92dp.png
但是当我通过 URL 附加任何已签名的 PDf/S3 时,我得到如下
Content-Type: application/pdf; name=structures-and-c.pdf
Content-transfer-encoding: 7bit
Content-disposition: attachment; filename=structures-and-c.pdf
当我没有明确设置内容类型时出现的异常。图像不会受到同样的抱怨。
javax.mail.internet.ParseException: In Content-Type string <pdf>,expected '/',got null
at javax.mail.internet.ContentType.<init>(ContentType.java:80)
at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1486)
at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1148)
at javax.mail.internet.MimeMultipart.updateHeaders(MimeMultipart.java:498)
at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1509)
at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2238)
at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:2198)
at javax.mail.internet.MimeMessage.writeto(MimeMessage.java:1877)
at javax.mail.internet.MimeMessage.writeto(MimeMessage.java:1854)
解决方法
如果您使用上述方式将 S3 签名 url 用于 PDF,则无需设置以下内容。
attachment.setDisposition(MimeBodyPart.ATTACHMENT);
attachment.setContent(<filename>,"application/pdf");
确保在生成签名 URL 时正确设置以下内容
GetObjectRequest.builder()
.bucket(bucketName)
.key(objectName)
.responseContentDisposition("attachment;filename=" + objectName)
.responseContentEncoding("base64")
.responseContentType("application/pdf")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。