1. Çerçeve agnostik: Servlet indirme dosyası ek olarak
<!-- with JS -->
<a href="javascript:window.location='downloadServlet?param1=value1'">
download
</a>
<!-- without JS -->
<a href="downloadServlet?param1=value1" >download</a>
2. Struts2 Framework: Dosyayı eklenti olarak indirme işlemi
<!-- 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>
Etiketi ile oluşturulan bir URL'ye OGNL ile işaret eden etiketi kullanmak daha iyi olur :<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>
Yukarıdaki durumlarda, dosyanın indirilmesi ( ) ve tarayıcı tarafından açılmaması ( ) gerektiğini belirterek , yanıta Content-Disposition üstbilgisini yazmanız gerekir . Sen ihtiyaç belirtmek için İçerik Türüattachment
inline
de ve (yardım için gerçekçi bir progressbar çizim tarayıcı) dosya adı ve uzunluğu eklemek isteyebilir.
Örneğin, bir ZIP indirirken:
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 ile (Eylem'i bir Servlet, örneğin doğrudan akış için bir saldırı olarak kullanmıyorsanız ), yanıta doğrudan bir şey yazmanız gerekmez; yalnızca Stream sonuç türünü kullanarak ve struts.xml dosyasında yapılandırdığınızda çalışır: 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. Çerçeve agnostik (/ Struts2 çerçevesi): Tarayıcı içindeki Servlet (/ Eylem) açılış dosyası
Dosyayı indirmek yerine tarayıcının içinde açmak istiyorsanız, İçerik düzenleme satır içi olarak ayarlanmalıdır , ancak hedef geçerli pencere konumu olamaz; javascript tarafından oluşturulan yeni bir pencereyi <iframe>
, sayfada veya yeni bir pencereyi "tartışılan" target = "_ blank" ile anında hedeflemeniz gerekir:
<!-- 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>