दिलचस्प पोस्ट
एंड्रॉइड अलार्म सेवा के तत्काल ट्रिगर को रोकने के लिए अगर दिन के लिए अलार्म का समय बीत चुका है जावास्क्रिप्ट विंडो का आकार बदलना घटना गहरी प्रतिलिपि, उथले प्रतिलिपि, क्लोन स्टैक, स्टेटिक, और हीप सी ++ में सी मिनेसेशल पाइपलाइन जोड़ना एक आइफ्रेम प्रतिक्रियाशील बनाना सूची दृश्य के लिए कस्टम एडाप्टर टेक्स्ट चौड़ाई की गणना करना कैसे जावा में एक हैशमैप सॉर्ट करने के लिए ContextLoaderListener या नहीं? कैसे एक एनएसटीटीटी के लिए एक क्लिक करने योग्य लिंक बनाने के लिए शॉर्ट सर्किट अर्रे कैसे करें? पीईसीएस क्या है (निर्माता उपभोक्ता सुपर बढ़ाता है)? पायथन एसआर वर्दी यूनिकोड प्रकार जावा: घूर्णन चित्र

JSF 2.2 <h: inputFile> का उपयोग कर फ़ाइल कैसे अपलोड करें? सहेजी गई फाइल कहां है?

मैं अपने JSF2.2 वेब अनुप्रयोग में फाइल अपलोड करने में सक्षम होना चाहता हूं, इसलिए मैंने नया <h:inputFile> घटक का उपयोग करना शुरू कर दिया।

मेरा एकमात्र सवाल यह है, मैं कैसे स्थान निर्दिष्ट कर सकता हूं, जहां फाइलें सर्वर में सहेजी जाएंगी? मैं उन्हें java.io.File उदाहरण के रूप में पकड़ना चाहता हूं। इसे बैकिंग बीन में कार्यान्वित किया जाना है, लेकिन मैं स्पष्ट रूप से यह नहीं समझता कि कैसे।

वेब के समाधान से एकत्रित समाधान "JSF 2.2 <h: inputFile> का उपयोग कर फ़ाइल कैसे अपलोड करें? सहेजी गई फाइल कहां है?"

JSF फ़ाइल को किसी भी पूर्वनिर्धारित स्थान में नहीं सहेज पाएगा यह मूल रूप से आपको केवल javax.servlet.http.Part उदाहरण के स्वाद में अपलोड की गई फ़ाइल प्रस्तुत करेगा जो कि अस्थायी रूप से सर्वर की मेमोरी और / या अस्थायी डिस्क संग्रहण स्थान पर संग्रहीत परिदृश्य के पीछे है, जिसे आपको चिंता नहीं करनी चाहिए।

इसे वांछित स्थान पर सहेजने के लिए, आपको Part#getInputStream() द्वारा सामग्री प्राप्त करने की आवश्यकता है और उसके बाद स्थान का प्रतिनिधित्व करने वाले Path को कॉपी करें । आप इसे (एजेक्स) एक्शन (श्रोता) विधि में सामान्य तरीके से कर सकते हैं। यहां एक ऐसा उदाहरण है जो HTML DOM change ईवेंट के दौरान एक एजेक्स श्रोता के साथ करता है:

 <h:form enctype="multipart/form-data"> <h:inputFile value="#{bean.file}"> <f:ajax listener="#{bean.save}" /> </h:inputFile> </h:form> 
 private Part file; // +getter+setter public void save() { try (InputStream input = file.getInputStream()) { Files.copy(input, new File(uploads, filename).toPath()); } catch (IOException e) { // Show faces message? } } 

uploads फ़ोल्डर और filename पूरी तरह से आपके नियंत्रण में है। उदाहरण के लिए "/path/to/uploads" और Part#getSubmittedFileName() क्रमशः। ध्यान रखें कि किसी भी मौजूदा फ़ाइल को ओवरराइट किया जाएगा, आप File#createTempFile() बनाने के लिए File#createTempFile() का उपयोग करना चाहेंगे

Part#write() उपयोग करें क्योंकि कुछ लोग सुझाव दे सकते हैं यह मूलतः अस्थायी भंडारण स्थान में फ़ाइल का नाम बदल देगा, जैसा कि @MultipartConfig(location) द्वारा पहचाना गया है। ExternalContext#getRealPath() फ़ाइल को फ़ोल्डर को परिनियोजित करने के लिए ExternalContext#getRealPath() उपयोग करें। फ़ाइल मूल युद्ध में फ़ाइल शामिल नहीं है कि सरल कारण के लिए युद्ध का दोबारा नियोजित किया गया है, जब खो जाएगा। इसे हमेशा परिनियोजन फ़ोल्डर के बाहर एक पूर्ण पथ पर सहेजें।

लाइव डेमो के लिए, OmniFaces शोकेस पर <o:graphicImage> डेमो के अंतिम आइटम की जांच करें

यह भी देखें:

  • JSF 2.2 इनपुटफ़ाइल का उपयोग करके फ़ाइल को डिस्क में लिखें
  • अपलोड किए गए फ़ाइल को JSF में कैसे सहेजें
  • सर्वलेट एप्लिकेशन में अपलोड की गई फ़ाइलों को सहेजने का अनुशंसित तरीका