2011-09-28 14 views
6

में लिखने के बिना एक जैवमेल के माइमेमेसेज के अनुलग्नक के रूप में एक अपाचे पीओआई वर्कबुक जोड़ें, मैं WorkBook (अपाचे पीओआई लाइब्रेरी से) "सीधे" MimeMessage ऑब्जेक्ट (जावाम लाइब्रेरी से) को कैसे पास करना है, यह जानने का प्रयास कर रहा हूं।) एक अनुलग्नक के रूप में, इसे सीधे फाइल सिस्टम में लिखने के बिना।फाइल सिस्टम

यह करने के लिए सबसे आसान तरीका लगता है निम्नलिखित:

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 

इस तरह यह काम करता है, लेकिन मैं नीचे एफएस में फ़ाइल में लिखने के लिए मजबूर कर रहा हूँ।

संबंधित प्रश्नों को पढ़ते समय मैं के बारे में ByteArrayInputStream और ByteArrayOutputStream पता चला और मेरी समस्या का समाधान करने के लिए (जब तक फ़ाइल 2GB जो बहुत संभावना नहीं लगता है के लिए तक पहुँच जाती है) लग रहा था।

मुझे उम्मीद है कि मैंने खुद को समझाया है, मुझे लगता है कि बाइटएरे धाराएं चाल चलती हैं, जिस तरह से किसी भी मदद या सलाह की सराहना की जाती है!

[2011/09/29] मैं एक बहुत ही सरल DataSource कार्यान्वयन कहा जाता है (लगता है क्या) ByteArrayDataSource बनाया, तो मैं स्वत: हेडर सेटअप और Base64 एन्कोडिंग की है।

उत्तर

3

MimeBodyPart रचनाकारों में से एक तर्क के रूप में एक बाइट सरणी (अनुलग्नक की सामग्री) लेता है। तो बस, एक ByteArrayOutputStream को अपनी कार्यपुस्तिका बारे में एक बाइट सरणी के लिए इस धारा को बदलने, और निर्माता को यह बाइट सरणी पारित:

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

ठीक है, मैं सच में आशा व्यक्त की कि इस तरह से काम किया लेकिन बाइनरी डेटा में सीधे लिखा है मेल बॉडी, इसलिए कोई कूल स्वचालित हेडर सेट अप नहीं है और कोई ठंडा बेस 64 एन्कोडिंग नहीं है। :(क्या मैं कुछ भूल रहा हूँ? – Minkiele

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^