Я пытаюсь понять, как передать 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.