दिलचस्प पोस्ट
कैसे matplotlib में एक साजिश को अद्यतन करने के लिए? जावास्क्रिप्ट में एमएसी पते पायथन में, मैं एक स्ट्रिंग कैसे विभाजित कर सकता हूं और अलग-अलग रखता हूं? Std :: cout का उपयोग कर तर्कों के मूल्यांकन के आदेश WPF में टेक्स्ट बॉक्स का अक्षम पृष्ठभूमि रंग कैसे बदल सकता है जावास्क्रिप्ट JSON दिनांक पार्स IE7 / IE8 रिटर्न NAN में हम कैसे PHP में दो तारीख अंतराल जोड़ सकते हैं लकड़हारा सबसे अच्छा अभ्यास अभ्यास एक WHERE खंड में एक स्तंभ उपनाम का जिक्र करते हुए डेटाबेस से ASP.NET MVC लोड रेज़र दृश्य क्रॉन जॉब के जरिए ईमेल कैसे भेजे जा सकते हैं PHP mysql Oracle को सी # से संग्रहीत कार्यप्रणाली को कॉल करना है? ओएलएल 2 रॉलिफिकेशन Windows Scipy स्थापित करें: कोई Lapack / Blas संसाधन नहीं मिला पॉवरहेल – बचती प्रक्रिया से बचने वाली स्ट्रिंग

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 में कैसे सहेजें
  • सर्वलेट एप्लिकेशन में अपलोड की गई फ़ाइलों को सहेजने का अनुशंसित तरीका