tomcat中配置如下:
代碼如下 |
複製代碼 |
<mime-mapping> <extension>txt</extension> <mime-type>application/octet-stream</mime-type> </mime-mapping> <mime-mapping> <extension>jpg</extension> <mime-type>application/octet-stream</mime-type> </mime-mapping> |
對於如上配置,當訪問副檔名txt或jpg的資源時就出現下載提示框,如果只需要對某些提到的資源讓其出現下載提示框,上述配置就不行了,解決的方法是在資源的response頭中設定content-type即可,例如:
php 中
代碼如下 |
複製代碼 |
header("Content-type:application/octet-stream"); header('Content-Disposition: attachment; filename="downloaded.txt"'); |
下載檔案程式
代碼如下 |
複製代碼 |
<? header("content-type:text/html; charset=utf-8"); $file_name=$_GET['name']; //伺服器的真實檔案名稱 $file_realName=urldecode($_GET['real']); //資料庫的檔案名稱urlencode編碼過的 $file_dir="upload/"; $file = fopen($file_dir . $file_name,"r"); // 開啟檔案 // 輸入檔案標籤 header( "Pragma: public" ); header( "Expires: 0" ); Header("Content-type: application/octet-stream"); Header("Accept-Ranges: bytes"); Header("Accept-Length: ".filesize($file_dir . $file_name)); Header("Content-Disposition: attachment; filename=" . iconv("UTF-8","GB2312//TRANSLIT",$file_realName)); // 輸出檔案內容 echo fread($file,filesize($file_dir . $file_name)); fclose($file); exit; ?> |
java 中
代碼如下 |
複製代碼 |
response.setContentType("application/octet-stream"); resp.setHeader("Content-Disposition", "attachment;filename="downloaded.txt"); |
如果需要為下載設定一個儲存的名字,可以用Content-Disposition屬性來指定。
執行個體
代碼如下 |
複製代碼 |
<%@page language="java" contentType="application/x-msdownload" import="java.io.*,java.net.*" pageEncoding="gbk"%><% response.reset();//可以加也可以不加 response.setContentType("application/x-download");//設定為下載application/x-download // /../../退WEB-INF/classes兩級到應用的根目錄下去,注意Tomcat與WebLogic下面這一句得到的路徑不同,WebLogic中路徑最後沒有/ ServletContext context = session.getServletContext(); String realContextPath = context.getRealPath("")+"\plan\計劃資料範本.xls"; String filenamedisplay = "計劃資料範本.xls"; filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8"); response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay); OutputStream output = null; FileInputStream fis = null; try { output = response.getOutputStream(); fis = new FileInputStream(realContextPath); byte[] b = new byte[1024]; int i = 0; while((i = fis.read(b)) > 0) { output.write(b, 0, i); } output.flush(); } catch(Exception e) { System.out.println("Error!"); e.printStackTrace(); } finally { if(fis != null) { fis.close(); fis = null; } if(output != null) { output.close(); output = null; } } %> |