1. फ्रेमवर्क एग्नोस्टिक: संलग्नक के रूप में सर्वलेट डाउनलोडिंग फ़ाइल
<!-- with JS -->
<a href="javascript:window.location='downloadServlet?param1=value1'">
download
</a>
<!-- without JS -->
<a href="downloadServlet?param1=value1" >download</a>
2. स्ट्रट्स 2 फ्रेमवर्क: संलग्नक के रूप में एक्शन डाउनलोडिंग फ़ाइल
<!-- with JS -->
<a href="javascript:window.location='downloadAction.action?param1=value1'">
download
</a>
<!-- without JS -->
<a href="downloadAction.action?param1=value1" >download</a>
<s:a>
टैग के साथ बनाए गए URL पर OGNL के साथ टैगिंग पॉइंट का उपयोग करना बेहतर होगा :<s:url>
<!-- without JS, with Struts tags: THE RIGHT WAY -->
<s:url action="downloadAction.action" var="url">
<s:param name="param1">value1</s:param>
</s:ulr>
<s:a href="%{url}" >download</s:a>
ऊपर मामलों में, आप की जरूरत है लिखने के लिए सामग्री-विन्यास के लिए शीर्ष लेख प्रतिक्रिया को निर्दिष्ट है कि डाउनलोड किया जा करने के लिए फ़ाइल की जरूरत है (, attachment
) और ब्राउज़र द्वारा खोला नहीं ( inline
)। आपको सामग्री प्रकार भी निर्दिष्ट करने की आवश्यकता है, और आप फ़ाइल का नाम और लंबाई जोड़ना चाह सकते हैं (ब्राउज़र को यथार्थवादी प्रगति पट्टी खींचने में मदद करने के लिए)।
उदाहरण के लिए, जब एक ज़िप डाउनलोड करें:
response.setContentType("application/zip");
response.addHeader("Content-Disposition",
"attachment; filename=\"name of my file.zip\"");
response.setHeader("Content-Length", myFile.length()); // or myByte[].length...
Struts2 के साथ (जब तक आप एक्शन को सर्वलेट के रूप में उपयोग नहीं कर रहे हैं, प्रत्यक्ष स्ट्रीमिंग के लिए एक हैक , उदाहरण के लिए), आपको सीधे प्रतिक्रिया के लिए कुछ भी लिखने की आवश्यकता नहीं है; बस स्ट्रीम परिणाम प्रकार का उपयोग करके और इसे struts.xml में कॉन्फ़िगर करने से काम होगा: EXAMPLE
<result name="success" type="stream">
<param name="contentType">application/zip</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="contentLength">${fileLength}</param>
</result>
3. फ्रेमवर्क एग्नॉस्टिक (/ स्ट्रट्स 2 फ्रेमवर्क): ब्राउज़र के अंदर सर्वलेट (/ एक्शन) खोलने वाली फाइल
यदि आप फ़ाइल को ब्राउज़र के अंदर खोलना चाहते हैं, तो इसे डाउनलोड करने के बजाय, सामग्री-स्वभाव को इनलाइन पर सेट किया जाना चाहिए , लेकिन लक्ष्य वर्तमान विंडो स्थान नहीं हो सकता है; आपको जावास्क्रिप्ट द्वारा बनाई गई एक नई विंडो को लक्षित करना होगा, <iframe>
पृष्ठ में, या "चर्चा की गई" लक्ष्य = "_ रिक्त" के साथ एक नई विंडो बनाई गई, जिस पर मक्खी:
<!-- From a parent page into an IFrame without javascript -->
<a href="downloadServlet?param1=value1" target="iFrameName">
download
</a>
<!-- In a new window without javascript -->
<a href="downloadServlet?param1=value1" target="_blank">
download
</a>
<!-- In a new window with javascript -->
<a href="javascript:window.open('downloadServlet?param1=value1');" >
download
</a>