2009-02-23 18 views
7

मैं (एक भौतिक फ़ाइल बनाने के बिना) स्मृति में एक जावा File वस्तु बना सकते हैं और एक बाइट सरणी के साथ अपनी सामग्री को भरने के लिए चाहते हैं एक जावा फ़ाइल वस्तु (या समतुल्य) स्मृति में एक बाइट सरणी का उपयोग कर बनाएँ।(एक भौतिक फ़ाइल के बिना)

क्या यह किया जा सकता है?

विचार एक स्प्रिंग InputStreamSource करने के लिए इसे पारित करने के लिए है। मैं नीचे दी गई विधि का प्रयास कर रहा हूं, लेकिन यह कहता है कि "बाइट सरणी में फ़ाइल नाम नहीं है।"।

MimeMessage message = mailSender.createMimeMessage(); 
MimeMessageHelper helper = new MimeMessageHelper(message);  
helper.setFrom("[email protected]", "xyz"); 
helper.setTo(email); 
helper.setText(body,true); 
helper.setSubject(subject); 
helper.addInline("cImage", 
     new InputStreamResource(new ByteArrayInputStream(imageByteArr))); 

mailSender.send(message); 

उत्तर

7

आप पूर्ण स्टैक ट्रेस पेस्ट कर सकते हैं? "स्मृति में" फ़ाइल जैसी कोई चीज़ नहीं है। एक ByteArrayInputStream का उपयोग करना पर्याप्त होना चाहिए।


आपको संसाधन # getFilename() को लागू करने की आवश्यकता है। निम्न का प्रयास करें:

helper.addInline("cImage", new ByteArrayResource(imageByteArr){ 
      @Override 
      public String getFilename() { 
       return fileName; 
      } 
     }); 
+0

java.lang.IllegalStateException: बाइट सरणी से लोड संसाधन में org.springframework.core.io.AbstractResource.getFilename (AbstractResource.java:148) पर org.springframework पर फ़ाइल नाम नहीं है .mail.javamail.MimeMessageHelper.addInline (MimeMessageHelper.java:922) –

+0

धन्यवाद केविन, यह काम किया !! शानदार समाधान –

+0

आप इसे जल्द ही www.creately.com पर कार्रवाई में देख सकते हैं :) (हम निजी बीटा एटीएम में हैं।) –

4

शायद आपको other constructor of InputStreamResource का उपयोग करने की आवश्यकता है?

+0

नहीं। मुझे मिलता है - java.lang.IllegalStateException: abc.png में org.springframework.core.io.AbstractResource.getFilename (AbstractResource.java:148) पर org.springframework.mail.javamail.MimeMessageHelper पर फ़ाइल नाम नहीं लेता है। addInline (MimeMessageHelper.java:922) –

0

क्या आपने addInline() में जो संसाधन फ़ीड किया है उसे बदलने का प्रयास किया है? अगर आप संसाधन को स्मृति में रखना चाहते थे, तो मैंने org.springframework.core.io.ByteArrayResource की कोशिश की होगी।

अद्यतन: मुझे लगता है कि आपको addInline() विधि के डेटासोर्स संस्करण का उपयोग करने की आवश्यकता हो सकती है और फिर हेल्पर क्लास में डेटा को फ़ीड करने के लिए बाइट सरणी बाध्य डेटा स्रोत ऑब्जेक्ट का उपयोग करना पड़ सकता है।

MimeMessage message = mailSender.createMimeMessage(); 
MimeMessageHelper helper = new MimeMessageHelper(message);    
helper.setFrom("[email protected]", "xyz"); 
helper.setTo(email); 
helper.setText(body,true); 
helper.setSubject(subject); 

// use javax.mail.util.ByteArrayDataSource 
ByteArrayDataSource imgDS = new ByteArrayDataSource(imageByteArr, "image/png"); 
helper.addInline("cImage", imgDS); 

mailSender.send(message); 
+0

के साथ पूरी तरह से काम करता है। वही अपवाद :( मुझे जो मिलता है वह बिटमैप डेटा का कच्चा सरणी है। ऐसा लगता है कि मुझे इसे किसी भी फाइल से पहले फ़ाइल में रखना होगा? –

+0

आपको addInLine() के संस्करण का उपयोग करने की आवश्यकता हो सकती है जो आपके दूसरे पैरामीटर के रूप में डेटासोर्स स्वीकार करता है। एक javax.util.mail.ByteArrayDataSource है जो भौतिक फ़ाइल के बिना बाइट सरणी को लपेटने की कार्यक्षमता को लागू करता है। – dhable

0

हो सकता है कि इसके लायक विधि का एक अलग अधिभार की कोशिश कर रहा:

addInline(String contentId, 
      InputStreamSource inputStreamSource, 
      String contentType) 

Ie:

addInline("cImage", 
      new InputStreamSource() 
      { 
      final private InputStream src = 
            new ByteArrayInputStream(imageByteArr); 
      public InputStream getInputStream() {return src;} 
      }, 
      "image/jpeg"); // or whatever image type you use 
0

यह MimeMessageHelper वस्तु बनाने के लिए महत्वपूर्ण है सही ढंग से करने के लिए मैं निम्नलिखित की कोशिश करेंगे अनुलग्नक और इनलाइन संसाधनों का समर्थन करें।

उदाहरण: MimeMessageHelper सहायक = नए MimeMessageHelper (संदेश, सच है, "UTF-8");

इस उदाहरण में मल्टीपार्ट को सत्य MULTIPART_MODE_MIXED_RELATED पर सेट किया जाएगा और अनुलग्नक और इनलाइन resouces समर्थित होंगे।

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