您好,登錄后才能下訂單哦!
Content-disposition 是 MIME 協議的擴展,MIME 協議指示 MIME 用戶代理如何顯示附加的文件。當 Internet Explorer 接收到頭時,它會激活文件下載對話框,它的文件名框自動填充了頭中指定的文件名。(請注意,這是設計導致的;無法使用此功能將文檔保存到用戶的計算機上,而不向用戶詢問保存位置。)
服務端向客戶端游覽器發送文件時,如果是瀏覽器支持的文件類型,一般會默認使用瀏覽器打開,比如txt、jpg等,會直接在瀏覽器中顯示,如果需要提示用戶保存,就要利用Content-Disposition進行一下處理,關鍵在于一定要加上p_w_upload:
Response.AppendHeader("Content-Disposition","p_w_upload;filename=FileName.txt");
備注:這樣瀏覽器會提示保存還是打開,即使選擇打開,也會使用相關聯的程序比如記事本打開,而不是IE直接打開了。
Content-Disposition就是當用戶想把請求所得的內容存為一個文件的時候提供一個默認的文件名。具體的定義如下:
content-disposition = “Content-Disposition” “:”
disposition-type *( “;” disposition-parm )
disposition-type = “p_w_upload” | disp-extension-token
disposition-parm = filename-parm | disp-extension-parm
filename-parm = “filename” “=” quoted-string
disp-extension-token = token
disp-extension-parm = token “=” ( token | quoted-string )
那么由上可知具體的例子:
Content-Disposition: p_w_upload; filename=“filename.xls”
當然filename參數可以包含路徑信息,但User-Agnet會忽略掉這些信息,只會把路徑信息的最后一部分做為文件名。當你在響應類型為application/octet- stream情況下使用了這個頭信息的話,那就意味著你不想直接顯示內容,而是彈出一個”文件下載”的對話框,接下來就是由你來決定“打開”還是“保存” 了。
注意事項:
1.當代碼里面使用Content-Disposition來確保瀏覽器彈出下載對話框的時候。 response.addHeader("Content-Disposition","p_w_upload");一定要確保沒有做過關于禁止瀏覽器緩存的操作。如下:
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "No-cache");
response.setDateHeader("Expires", 0);
不然會發現下載功能在opera和firefox里面好好的沒問題,在IE下面就是不行,就是找不到文件。
在IE5和Opera中瀏覽器會不管Content-Disposition頭的內容,要再次聲明Content-Type,聲明Content-Length可以顯示下載進度條
代碼如下:
$fileName = 'config.ini'; $mimeType = 'application/zip'; if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 5') or strpos($_SERVER['HTTP_USER_AGENT'], 'Opera 7')) { $mimeType = 'application/x-download'; } header('Content-Disposition: p_w_upload; filename=' . $fileName); header('Content-Type: ' . $mimeType); header('Content-Length: ' . filesize($fileName));
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。