jsp下載檔案demo
1.前台
2.後台
1.前台
http://www.javaeye.com/topic/446631
為什麼要選擇js方式下載檔案?因為需要根據你的點擊,及選擇來動態計算的。
如果直接 ajax 請求,總會出現些問題...具體表現為檔案直接以字串形式返回。
首先方案一,使用window.open(url),這樣會有一個問題,因為會開啟一個視窗!雖然這個視窗會在點擊下載時關閉,但看起來確實不美觀!
方案二,使用Iframe ,具體見代碼:
Javascript代碼
- function downloadFile(url){
- var elemIF = document.createElement("iframe");
- elemIF.src = url;
- elemIF.style.display = "none";
- document.body.appendChild(elemIF);
- }
完美解決!
(PS:發現構造語言來描述明白一件事真是個累人的活啊,看不懂,輕拍)
- Ext.Ajax.request({
- url:'getPath.action',
- success:function(res){
- var obj = Ext.decode(res.responseText);
- //console.log(obj);//可以到Firefox的firebug下面看看obj裡面的結構
- //加入getPath返回的json為{'path':'upload/abc.jpg'}
- window.location.href = obj.path;//這樣就可以彈出下載對話方塊了
- }
- });
只要連結的檔案存在,就會給出彈出儲存對話方塊.
<a href="test.rmvb">下載此檔案 </a>
如果你一定要用JS的話,有兩種辦法,推薦第一種:
辦法1: //好處就是,指定下載的檔案如果不存在,瀏覽器地址也不會有什麼變化.反之則提示儲存.
HTML code <a href="#" onClick="download()">下載檔案</a> <iframe id="downloadURL" height="0" width="0" src=""></iframe> <script language="javascript"> function download(){ document.getElementById("downloadURL").src="test.rmvb"; } </script>
辦法2: //缺點就是,指定下載的檔案如果不存在,瀏覽器地址會變化.
HTML code <a href="#" onClick="download(this)">下載檔案</a> <script language="javascript"> function download(obj){ obj.href="test.rmvb"; } </script>
2.背景程式
public void downloadPdf(HttpServletRequest request, HttpServletResponse response)<br />throws Exception {<br />String id = request.getParameter("projectid");</p><p>String filename = this.dao.queryDocFillName(id);<br />String path = request.getContextPath() + "/frontWeb/onecasefile/approvefile/" + filename + ".pdf";</p><p>File pdfFile = new File(request.getRealPath("/").concat(<br />"frontWeb/onecasefile/approvefile/").replace("\\", "/") + filename + ".pdf");<br />response.setContentType("application/pdf");<br />response.setContentType("application/force-download");<br />response.addHeader(<br /> "Content-Disposition","attachment; filename=" + "download" );<br />response.setContentLength( (int) pdfFile.length( ) );</p><p>FileInputStream input = new FileInputStream(pdfFile);<br />BufferedInputStream bufferedInputStream = new BufferedInputStream(input);<br />int readBytes = 0;<br />while((readBytes = bufferedInputStream.read( )) != -1)<br /> response.getOutputStream().write(readBytes);<br />}