2011-09-28 31 views
6

'da yazmadan bir Apache POI Çalışma Kitabı'nı bir WorkBook (Apache POI kitaplığından) "doğrudan" bir MimeMessage nesnesine (Javamail kütüphanesinden) nasıl geçeceğimi anlamaya çalışıyorum) bir dosya olarak doğrudan dosyaya yazmak zorunda kalmadan bir ek olarak.Bir Javamail'in MimeMessage eki olarak dosya sistemi

Bunu yapmanın en kolay yolu görünüyor şu:

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 

çalıştığını Bu şekilde ancak FS dosyayı yazmak zorunda kalıyorum. ilgili sorular okurken

Ben yaklaşık ByteArrayInputStream ve ByteArrayOutputStream öğrendim ve (dosya çok zor görünüyor 2GB kadar şişer sürece) benim sorunu çözmek gibiydi.

Umarım kendim olduğunu açıkladım, sanırım ByteArray akışları hile yapacak, bu şekilde herhangi bir yardım veya tavsiye takdir edilecektir!

[2011/09/29] Aradım çok basit DataSource uygulanmasını (bilin bakalım ne) ByteArrayDataSource yarattı, bu yüzden otomatik başlıkları kurulum ve Base64 kodlama var.

cevap

3

MimeBodyPart yapıcılarından biri, argüman olarak bir bayt dizisi (ekin içeriği) alır. Dolayısıyla, sadece bir ByteArrayOutputStream için çalışma kitabını yazma bir bayt dizisi bu akışı dönüşümü ve kurucusuna bu bayt dizisi geçmesi:

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

Tamam, gerçekten bu şekilde çalıştı fakat ikili veri doğruca yazılır ümit posta gövdesi, bu yüzden hiçbir serin otomatik başlıklar kurmak ve hiçbir serin base64 kodlama. :(Bir şey özlüyor muyum? – Minkiele

İlgili konular