2011-09-28 7 views
6

Próbuję dowiedzieć się, jak przekazać WorkBook (z biblioteki punktów Apache) "bezpośrednio" do obiektu MimeMessage (z biblioteki Javamail) jako załącznik, bez konieczności zapisywania go bezpośrednio w systemie plików.Dodaj apache POI WorkBook jako załącznik do MimeMessage Javamail bez pisania w systemie plików

Najprostszym sposobem na to wydaje się, co następuje:

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 

ten sposób to działa, ale jestem zmuszony zapisać plik do FS.

Podczas czytania powiązanych pytań dowiedziałem się o ByteArrayInputStream i ByteArrayOutputStream i wydawało mi się rozwiązać mój problem (chyba, że ​​plik puchnie do 2GB, co wydaje się bardzo mało prawdopodobne).

Mam nadzieję, że wyjaśniłem sobie, myślę, że strumienie ByteArray zrobią lewę, przy okazji każda pomoc lub rada są doceniane!

[29.09.2011] stworzyłem bardzo prosty DataSource realizację nazwie (wiecie co) ByteArrayDataSource, więc mam ustawienia automatyczne nagłówki i kodowania Base64.

Odpowiedz

3

Jeden z konstruktorów MimeBodyPart przyjmuje jako argument tablicę bajtów (zawartość załącznika). Więc po prostu napisać skoroszytu do ByteArrayOutputStream, przekształcenie tego strumienia do tablicy bajtów, i przekazać tę tablicę bajtów do konstruktora:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
tmpWorkBook.write(baos); 
MimeBodyPart attachment = new MimeBodyPart(internetHeaders, baos.toByteArray()); 
// or MimeBodyPart attachment = 
//  new MimeBodyPart(new ByteArrayInputStream(baos.toByteArray())); 
+0

Ok, ja naprawdę nadzieję, że w ten sposób działało ale dane binarne jest napisany prosto do treść wiadomości e-mail, więc nie ma żadnych fajnych automatycznych nagłówków i nie ma fajnego kodowania base64. :(Czy czegoś mi brakuje? – Minkiele

Powiązane problemy