2012-08-01 7 views
5

मैं एक आवेदन विकसित कर रहा हूं, जहां लोग डीबी में उल्लिखित किसी स्थान से आवश्यक स्थानीय फ़ाइल डाउनलोड करेंगे। मैं सर्वर से फ़ाइल डाउनलोड करने के लिए स्ट्रैट्स 2 का उपयोग कर रहा हूं। मैं बिना किसी अपवाद के फ़ाइल डाउनलोड कर सकता हूं और यह पूरी तरह से काम करता है। लेकिन फ़ाइलों को डाउनलोड करने में फ़ाइल नाम है जो मैंने struts.xml में निर्दिष्ट किया है, मैं चाहता हूं कि यह सटीक फ़ाइल नाम हो जो डाउनलोड हो रहा है। उदाहरण struts.pdf यदि मूल फ़ाइल का नाम है, मैं, download.pdf, यह कैसे रोकने के लिए और इस प्रकार फ़ाइल वास्तविक फ़ाइल नाम के साथस्ट्रूट्स 2 डाउनलोड - फ़ाइल नाम गतिशील रूप से कॉन्फ़िगर कैसे करें?

मेरे struts.xml विन्यास डाउनलोड करने के लिए के रूप में इसे डाउनलोड करने हूँ

<action name="download" class="action.DownloadAction"> 
     <result name="success" type="stream"> 
      <param name="contentType">application/octet-stream</param> 
      <param name="inputName">fileInputStream</param> 
      <param name="contentDisposition">attachment;filename="download.log"</param> 
      <param name="bufferSize">1024</param> 
     </result> 
     <result name="error">/live/useradminerror.jsp</result> 
    </action> 

और मैं यूआई के विकास के लिए struts2-jquery का उपयोग कर उल्लेख करना भूल गया। कृपया मेरी परियोजना के बहुत ही महत्वपूर्ण चरण में, इस में मेरी सहायता करें।

उत्तर

11

अगर मैं सही आप, जो आपके DB में संग्रहीत किया जा रहा है फ़ाइल पारित करने के लिए चाहते हैं, तो इस मामले आप आसानी से

class MyFileDownloadAction extends ActionSupport{ 

    private String fileName; 
    // getter and setter 

    public String fileDownload() throws exception{ 
     // file download logic 
     fileName ="abc" // can set name dynamic from DB 
    } 

} 

<action name="download" class="action.DownloadAction"> 
     <result name="success" type="stream"> 
      <param name="contentType">application/octet-stream</param> 
      <param name="inputName">fileInputStream</param> 
      <param name="contentDisposition">attachment;filename="${filename}"</param> 
      <param name="bufferSize">1024</param> 
     </result> 
     <result name="error">/live/useradminerror.jsp</result> 
    </action> 

आप की तरह आप कार्रवाई वर्ग से उन सभी मापदंडों को पारित करके ऐसा कर सकते हैं है कर रहा हूँ अपने struts.xml वर्ग में गतिशील रूप से प्रत्येक पैरामीटर को पारित कर सकते हैं। उम्मीद है कि यह आपको की मदद करेगा इस प्रकार आप इस फ़ाइल का नाम अपने एक्सएमएल

+0

प्रतिक्रिया के लिए धन्यवाद, क्या यह डेटाबेस में बिल्कुल वही नाम डाउनलोड करेगा। – Esh

+1

हां यह होगा, क्योंकि इस मामले में आप अपने एक्शन क्लास –

+0

से रन टाइम पर फ़ाइल नाम पास कर रहे हैं, धन्यवाद उमेश, मैं वास्तविक फ़ाइल नाम – Esh

1

स्ट्रैट्स में एनोटेशन के लिए उपयोग करेंगे। समाधान बहुत उपयोगी था। धन्यवाद। मेरे लिए "कंटेंट टाइप" ने बहुत अंतर नहीं बनाया।

@Action(value = "/download", results = { @Result(name = "success", type = "stream", 
params= {"contentType", "application/octet-stream", "inputName","fileInputStream",  
"contentDisposition","attachment; filename=\"${fileName}\"", "bufferSize", "1024" }) 
}) 
संबंधित मुद्दे