Tôi đang cố gắng tìm ra cách để chuyển một WorkBook
(từ thư viện Apache POI) "trực tiếp" đến một đối tượng MimeMessage
(từ thư viện Javamail)) dưới dạng tệp đính kèm, mà không phải viết trực tiếp trong hệ thống tệp.Thêm một Apache POI WorkBook dưới dạng tệp đính kèm vào MimeMessage của Javamail mà không cần viết trong hệ thống tập tin
Cách đơn giản nhất để làm điều này dường như sau:
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
Bằng cách này nó hoạt động nhưng tôi buộc phải viết ra các tập tin vào FS.
Trong khi đọc các câu hỏi liên quan tôi đã tìm hiểu về ByteArrayInputStream
và ByteArrayOutputStream
và dường như giải quyết được sự cố của tôi (Trừ khi tệp bị phồng lên 2GB
có vẻ như rất khó xảy ra).
Tôi hy vọng tôi đã giải thích bản thân mình, tôi nghĩ rằng các luồng ByteArray sẽ thực hiện thủ thuật, bằng cách bất kỳ trợ giúp hoặc lời khuyên nào được đánh giá cao!
[2011/09/29] Tôi tạo ra một DataSource
thực hiện rất đơn giản gọi là (đoán những gì) ByteArrayDataSource
, vì vậy tôi có các thiết lập tiêu đề tự động và mã hóa Base64.
Ok, tôi thực sự hy vọng rằng cách này làm việc nhưng các dữ liệu nhị phân được viết thẳng vào cơ thể thư, do đó, không có tiêu đề tự động mát mẻ được thiết lập và không có mã hóa base64 mát mẻ. :(Tui bỏ lỡ điều gì vậy? – Minkiele