Estoy tratando de averiguar cómo pasar un WorkBook
(de la biblioteca de POI de Apache) "directamente" a un objeto MimeMessage
(de la biblioteca Javamail) como un archivo adjunto, sin tener que escribirlo directamente en el sistema de archivos.Agregar un Libro de trabajo POI Apache como archivo adjunto a MimeMessage de Javamail sin escribir en el sistema de archivos
La forma más sencilla de hacer esto parece lo siguiente:
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
De esta manera funciona, pero estoy obligado a escribir el archivo en el FS.
Mientras lee las preguntas relacionadas que se enteraron de ByteArrayInputStream
y ByteArrayOutputStream
y pareció resolver mi problema (menos que el archivo se hincha hasta 2GB
que parece muy poco probable).
Espero haberme explicado, creo que las transmisiones ByteArray harán el truco, por cierto, ¡cualquier ayuda o consejo es apreciado!
[09/29/2011] he creado una aplicación muy simple DataSource
llamada (adivinar qué) ByteArrayDataSource
, así que tengo la configuración cabeceras automáticas y codificación Base64.
Ok, realmente esperaba que de esta manera funcionó, pero los datos binarios se escribe directamente en el cuerpo del correo, por lo que no se configuran encabezados automáticos geniales y no se codifica cool base64. :(¿Me estoy perdiendo de algo? – Minkiele