gpt4 book ai didi

java - 将 Apache POI 工作簿作为附件添加到 Javamail 的 MimeMessage 中,而无需在文件系统中写入

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:31:00 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何将 WorkBook(来自 Apache POI 库)“直接”传递给 MimeMessage 对象(来自 Javamail 库)附件,而不必直接将其写入文件系统。

最简单的方法如下:

File attachmentSource = new File("tmpsource.xls");

WorkBook tmpWorkbook = new HSSFWorkBook();
//Do stuff with workbook
tmpWorkBook.write(new FileOutputStream(attachmentSource));

//Create all the Session, MimeMessage and MimeMultipart
MimeBodyPart attachment = new MimeBodyPart();
attachment.setDataHandler(new DataHandler(new FileDataSource(attachmentSource)));
attachment.setFileName(attachmentSource.getName());

//Do stuff with the message and send it

这种方式可行,但我不得不将文件写入 FS。

在阅读相关问题时我发现了关于 ByteArrayInputStreamByteArrayOutputStream 并且似乎解决了我的问题(除非文件膨胀到 2GB这似乎不太可能)。

我希望我解释了自己,我认为 ByteArray 流可以解决问题,顺便说一句,感谢任何帮助或建议!

[2011 年 9 月 29 日]我创建了一个非常简单的 DataSource 实现,称为(猜猜是什么)ByteArrayDataSource,所以我有自动 header 设置和 Base64 编码。

最佳答案

MimeBodyPart 构造函数之一采用字节数组(附件的内容)作为参数。所以只需将您的工作簿写入 ByteArrayOutputStream,将此流转换为字节数组,然后将此字节数组传递给构造函数:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
tmpWorkBook.write(baos);
MimeBodyPart attachment = new MimeBodyPart(internetHeaders, baos.toByteArray());
// or MimeBodyPart attachment =
// new MimeBodyPart(new ByteArrayInputStream(baos.toByteArray()));

关于java - 将 Apache POI 工作簿作为附件添加到 Javamail 的 MimeMessage 中,而无需在文件系统中写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7580571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com