2011-09-01 12 views
5

मेरे पास एक अपलोड फॉर्म वाला एक वेब एप्लिकेशन है जहां उपयोगकर्ता फाइल अपलोड कर सकते हैं।जावा ईई - अपलोड की गई फाइलों के वास्तविक रास्ते को पाने का सबसे अच्छा तरीका?

मैं फ़ाइलों को एक फ़ोल्डर 'फाइल' स्टोर करना चाहता हूं। और मैं यह फ़ोल्डर सीधे वेबैप-रूट के नीचे रखना चाहता हूं।

struts2 का उपयोग करना, मेरी uploadFileAction में, मैं आसानी से इस पथ String uploadDir = ServletActionContext.getServletContext().getRealPath("/files")+ "/";

के साथ सेट कर सकते हैं लेकिन जब मैं फ़ाइलों, जाहिरा तौर पर मेरी सेम जो getServletContext() करने के लिए फ़ाइल पहुँच नहीं है का उपयोग करने की कोशिश करता है प्राप्त करने का प्रयास कर रहा हूँ और इस प्रकार getRealPath

पर एक nullpointer फेंकता है अब मैं यह पता लगाने की कोशिश कर रहा हूं कि मुझे यह कैसे करना चाहिए। मैंने वसंत संसाधन के बारे में सुना है कि जाने का रास्ता है, लेकिन मुझे कोई प्रासंगिक उदाहरण नहीं मिल रहा है।

क्या मेरे पथ पाने का कोई आसान तरीका है? मैं सिर्फ रूटपैथ को अपने वेबपैप पर चाहता हूं। कुछ भी कम नहीं ...

उत्तर

8

मैं यह फ़ोल्डर सीधे वेबैप-रूट के नीचे रखना चाहता हूं।

यह काम नहीं करेगा। जब भी आप वेबपैप को पुन: नियोजित करते हैं या यहां तक ​​कि जब आप सर्वर को पुनरारंभ करते हैं तब भी वे सभी फ़ाइलें खो जाएंगी। उन फ़ाइलों को मूल WAR के हिस्से के रूप में शामिल नहीं किया गया है।

आपको वेबपैड के संदर्भ के बाहर उन्हें एक निश्चित पथ में स्टोर करने की आवश्यकता है। जैसे /var/webapp/uploads। आप इस पथ को गुण फ़ाइल में या सिस्टम प्रॉपर्टी के रूप में कॉन्फ़िगर कर सकते हैं।

+0

वाह। मैंने इसके बारे में सोचा नहीं था। मेरी स्पष्ट त्रुटि को इंगित करने के लिए धन्यवाद। लेकिन जैसे ही मैं प्लेटफॉर्म (लिनक्स-विंडोज़) के बीच चल रहा हूं, मुझे अपने अपलोड डीआईआर के सापेक्ष पथ की आवश्यकता है। जब भी मैं प्लेटफॉर्म-कूद करता हूं, तो मैं प्रॉपर्टी फ़ाइल को संपादित करना पसंद नहीं करता ... – user829237

+1

जावा 'फ़ाइल' एपीआई में, यूनिक्स जैसे पथ '/ var/webapp/uploads' जैसे विंडोज़ में भी ठीक है। यह केवल उस डिस्क के सापेक्ष होगा जहां से कोड निष्पादित किया गया है और जावा स्लेश के बारे में परवाह करेगा। जैसे जब सर्वर 'सी:' पर ​​चलता है, तो यह 'C: \ var \ webapp \ uploads' के रूप में समाप्त हो जाएगा। – BalusC

+0

उस बिट को साफ़ करने के लिए धन्यवाद। मुझे यूनिक्स-न्यूब होने के लिए क्षमा करें, लेकिन मुझे अभी भी कुछ निश्चित नहीं है कि पथ को कैसे निर्दिष्ट किया जाए, क्योंकि मेरा यूनिक्स सर्वर एक साझा होस्ट है और मुझे लगता है कि मुझे केवल ~ निर्देशिका तक पहुंच है और मुझे इसे रखना होगा फाइलें उस के नीचे कहीं भी .. किसी भी पॉइंटर्स बहुत मददगार होंगे! – user829237

3

मुझे पता चला है कि इस ओएस प्लेटफ़ॉर्म का उपयोग करने के बावजूद इसे पूरा करने के कुछ तरीके हैं। मैं आमतौर पर अपने वेब एप्लिकेशन के सापेक्ष अपनी फाइलों को किसी तरह से स्टोर करना चाहता हूं। ऐसा कहा जा रहा है, ऐसा करने का सबसे आसान तरीका वास्तविक वर्ग प्राप्त करने के संदर्भ के रूप में आपकी कक्षा फ़ाइल का उपयोग कर रहा है। मैं कुछ वेब अनुप्रयोगों है कि मैं का निर्माण किया है के लिए छवि अपलोड स्टोर करने के लिए निम्न जैसा कुछ का उपयोग करें:

public class FileLocationTest { 

    public static void main(String[] args) { 
     String path = FileLocationTest.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 
     System.out.println(path); 
    } 
} 

यह आपके वेब एप्लिकेशन में कोई स्थिर उपयोगिता वर्ग का उपयोग किया जा सकता है, या करने के लिए उस बात के लिए किसी भी वर्ग ओएस के बावजूद अपने आवेदन का वास्तविक मार्ग प्राप्त करें। वैकल्पिक रूप से एक सर्वलेट में मैंने टॉमकैट स्थान प्राप्त करने के लिए अनुरोध वर्ग का भी उपयोग किया है यदि मेरा ऐपबेस एक अलग क्षेत्र में है, तो इस तरह कुछ:

String location = request.getClass().getProtectionDomain().getClassLoader().getClass().getProtectionDomain().getCodeSource().getLocation().getPath(); 
    String path = location.substring(0, location.indexOf("/tomcat")) + "/data/events/images/"; 
संबंधित मुद्दे

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