1. Framework agnostic: Servlet ดาวน์โหลดไฟล์เป็นไฟล์แนบ
<!-- with JS -->
<a href="javascript:window.location='downloadServlet?param1=value1'">
download
</a>
<!-- without JS -->
<a href="downloadServlet?param1=value1" >download</a>
2. Struts2 Framework: การดำเนินการดาวน์โหลดไฟล์เป็นไฟล์แนบ
<!-- 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>
แท็กที่มีOGNLกับURL ที่สร้างด้วย<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
) คุณต้องระบุประเภทเนื้อหาด้วยและคุณอาจต้องการเพิ่มชื่อไฟล์และความยาว (เพื่อช่วยให้เบราว์เซอร์วาดแถบความคืบหน้าตามจริง)
ตัวอย่างเช่นเมื่อดาวน์โหลด ZIP:
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 (ยกเว้นว่าคุณกำลังใช้ Action เป็น Servlet, แฮ็คสำหรับการสตรีมโดยตรง ) คุณไม่จำเป็นต้องเขียนอะไรลงไปในคำตอบโดยตรง เพียงใช้ประเภทผลการสตรีมและกำหนดค่าใน struts.xml จะทำงาน: ตัวอย่าง
<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. Framework agnostic (/ Struts2 framework): การเปิดไฟล์ Servlet (/ Action) ภายในเบราว์เซอร์
หากคุณต้องการเปิดไฟล์ภายในเบราว์เซอร์แทนที่จะดาวน์โหลดไฟล์ต้องกำหนดเนื้อหาการจัดการเป็นแบบอินไลน์แต่เป้าหมายไม่สามารถเป็นตำแหน่งหน้าต่างปัจจุบันได้ คุณต้องกำหนดเป้าหมายหน้าต่างใหม่ที่สร้างขึ้นโดย javascript, <iframe>
ในหน้า, หรือหน้าต่างใหม่ที่สร้างขึ้นทันที, ด้วย "ที่กล่าวถึง" target = "_ blank":
<!-- 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>