2010-01-14 15 views
12

मैं फाइल सिस्टम में अपलोड की गई मल्टीपार्ट फ़ाइल लिखने की कोशिश कर रहा हूं। मेरे पास ऑडियो नामक एक निर्देशिका है जो मेरे वेब एप्लिकेशन की रूट में बैठती है (वेब-आईएनएफ के अंदर नहीं, बल्कि इसके बगल में, यह सीएसएस और जावास्क्रिप्ट जैसी सार्वजनिक रूप से सुलभ है)।स्प्रिंग कंट्रोलर से वेब ऐप रूट प्राप्त करें

मैं उस निर्देशिका में अपलोड की गई फ़ाइल लिखना चाहता हूं लेकिन मुझे जिस मार्ग की आवश्यकता है उसे प्राप्त नहीं कर पा रहा हूं। मैंने सोचा कि ServletContext() को realPath() का उपयोग कर काम कर सकता है, लेकिन मेरे पास स्प्रिंग नियंत्रक के माध्यम से ServletContext का संदर्भ नहीं है। किसी भी एचईपी

@RequestMapping(value="/uploadSample") 
public ModelAndView upload(HttpServletRequest request, HttpServletResponse response, @RequestParam("file") MultipartFile f) { 

    if (f == null) { 
     return new ModelAndView("upload", "msg", "The file is null."); 
    } 
    try { 
     // I need to set AUDIO_PATH to <webAppRoot>/audio 
     FileOutputStream file = new FileOutputStream(AUDIO_PATH + "/" + f.getOriginalFilename()); 
     file.write(f.getBytes()); 
     file.close(); 
    } 
    catch (FileNotFoundException ex) { 
     Logger.getLogger(SampleUploadController.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    catch (IOException ex) { 
      Logger.getLogger(SampleUploadController.class.getName()).log(Level.SEVERE, null, ex); 
    } 



    return new ModelAndView("upload", "msg", "File (" + f.getOriginalFilename() + ") successfully uploaded."); 
} 

} के लिए धन्यवाद

+0

इस प्रश्न पूछने के लिए धन्यवाद, यह काफी मददगार था क्योंकि मुझे अभी भी यह समस्या थी। – MetroidFan2002

उत्तर

11

मैं एक ServletContext() हो रही सोचा तो का उपयोग कर realPath() काम कर सकते हैं, लेकिन मैं ServletContext के लिए एक संदर्भ की जरूरत नहीं है

हाँ आप करते हैं। HttpServletRequest.getSession().getServletContext()

+0

सही, मेरे लिए यह हल चीजें। धन्यवाद। –

+4

यह काम नहीं करेगा, हालांकि, यदि आपके पास सत्र नहीं है और सत्रहीन रहना चाहते हैं। एक्स्टाव से जवाब देखें। – Paul

26

ServletContext के संदर्भ के लिए, अपने वर्ग को लागू कर सकते हैं ServletContextAware

संपादित करें:ServletContext भी सेम नाम servletContext के तहत वेब अनुप्रयोग कंटेनर में पहुँचा जा सकता है, तो आप इसे में किसी भी अन्य की तरह सेम इंजेक्षन कर सकते हैं वसंत।

+0

साफ, मुझे नहीं पता था कि इसके लिए एक बीन में बनाया गया था। धन्यवाद। –

+1

यह बेहतर जवाब है। यह तब भी काम करता है जब आपके पास कोई सत्र न हो, और निर्भरता इंजेक्शन सभी के बाद वसंत मार्ग है। – Paul

+0

काम नहीं कर रहा है। अगर मैं सर्वलेट के अंदर नहीं हूं ... मुझे "संदर्भ" ऑब्जेक्ट मिलता है, लेकिन getContextPath शून्य लौटाता है। – OhadR

0

ServletContext का उपयोग कर सर्वर यूआरएल प्राप्त करना विभिन्न वातावरणों में सुरक्षित नहीं है।

संपत्ति फ़ाइल से यूआरएल पुनर्प्राप्त करना बेहतर होगा।

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