Добавить Apache POI WorkBook в качестве вложения в MimeMessage Javamail без записи в файловую систему

Я пытаюсь понять, как передать 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 и, похоже, решил мою проблему (если только размер файла не увеличился до 2 ГБ , что кажется очень большим вряд ли).

Надеюсь, я объяснил себя, я думаю, что потоки ByteArray помогут, кстати, любая помощь или совет приветствуются!

[29.09.2011] Я создал очень простую реализацию DataSource под названием (угадайте what) ByteArrayDataSource , поэтому у меня есть автоматическая настройка заголовков и кодировка Base64.

7
задан Minkiele 29 September 2011 в 10:49
поделиться