jQuery.Ajax下载文件
下面是一个使用插件源代码的简单用例演示。 演示页面包含了许多其他的'更好的用户界面'示例。
$.fileDownload('some/file.pdf')
. done(function () { alert('File download a success!'); })
. fail(function () { alert('File download failed!'); });
你不能,也不需要通过Ajax进行这里操作。 只使用
window.location="download.action?para1=value1...."
1 。不受框架影响的:Servlet下载文件作为附件
<!-- with JS -->
<a href="javascript:window.location='downloadServlet?param1=value1'">
download
</a>
<!-- without JS -->
<a href="downloadServlet?param1=value1"> download</a>
2.Struts2 框架︰行动下载文件作为附件
<!-- 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与 <s:url>
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>
在上述情况下,需要写 Content-Disposition响应头,指定需要下载的文件( attachment
) ( inline
) 而不是打开的浏览器。需要指定内容类型,你可能希望添加文件名和( 帮助浏览器绘制真实的progressbar ) 长度。
例如下载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 ( 除非你将这里操作用作一个 Servlet,否则将使用一个 hack 作为直接流编辑器,例如), 你不需要写任何响应,仅仅使用流结果类型 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 。框架不可知(/Struts2 框架): Servlet(/Action) 在浏览器中打开文件
如果你想在浏览器里打开文件,下载它,而是在 Content-disposition必须设置为内联,但目标不能当前窗口位置;你必须目标javascript创建的一个新窗口,一个 <iframe>
页面,或创建一个新窗口 on-the-fly"讨论过"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>