Я пытаюсь выяснить, как передать 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.
Читая соответствующие вопросы, я узнал о ByteArrayInputStream
и ByteArrayOutputStream
и, похоже, решил мою проблему (если файл не набирает 2GB
, что кажется очень маловероятным).
Надеюсь, я объяснилЯ думаю, что потоки ByteArray справятся со своей задачей, и мы ценим любую помощь или совет!
[29.09.2011] Я создал очень простую реализацию DataSource
называется (угадайте, что) ByteArrayDataSource
, поэтому у меня есть автоматическая настройка заголовков и кодировка Base64.