1. 設(shè)置超鏈接的href屬性
<a href="文件地址"></a>
如果瀏覽器不能解析該文件汪厨,瀏覽器會(huì)自動(dòng)下載。
而如果文件是圖片或者txt,會(huì)直接在瀏覽器中打開(kāi)躲雅。
2. 輸出文件流
//download.php
//頁(yè)面加載的時(shí)候就調(diào)用
downloadFile("3.rar","something.rar");
//$filePath是服務(wù)器的文件地址
//$saveAsFileName是用戶指定的下載后的文件名
function downloadFile($filePath,$saveAsFileName){
// 清空緩沖區(qū)并關(guān)閉輸出緩沖
ob_end_clean();
//r: 以只讀方式打開(kāi),b: 強(qiáng)制使用二進(jìn)制模式
$fileHandle=fopen($filePath,"rb");
if($fileHandle===false){
echo "Can not find file: $filePath\n";
exit;
}
Header("Content-type: application/octet-stream");
Header("Content-Transfer-Encoding: binary");
Header("Accept-Ranges: bytes");
Header("Content-Length: ".filesize($filePath));
Header("Content-Disposition: attachment; filename=\"$saveAsFileName\"");
while(!feof($fileHandle)) {
//從文件指針 handle 讀取最多 length 個(gè)字節(jié)
echo fread($fileHandle, 32768);
}
fclose($fileHandle);
}
**注: **
(1)download.php可以設(shè)置為<a>
標(biāo)簽的href
屬性骡和,點(diǎn)擊<a>
標(biāo)簽相赁,則瀏覽器會(huì)提示下載相寇。
(2)jQuery模擬觸發(fā)<a>
的click
事件時(shí)有bug,應(yīng)該使用html對(duì)象的click方法钮科。$('#hyperLink')[0].click();
(3)jQuery Mobile會(huì)改變<a>
的行為唤衫。所以,在使用jQuery Mobile時(shí)绵脯,無(wú)論手動(dòng)點(diǎn)擊還是javascript模擬點(diǎn)擊佳励,都會(huì)跳轉(zhuǎn)到download.php頁(yè)面,并不會(huì)觸發(fā)下載蛆挫。
(4)location.href
或location.replace
定向到download.php也可以實(shí)現(xiàn)下載赃承。
這種方法不受jQuery Mobile的影響。
(5)以上兩種方法進(jìn)行下載時(shí)悴侵,chrome會(huì)提示“Resource interpreted as Document but transferred with MIME type application/octet-stream
”瞧剖。
為<a>
增加html5屬性download可以解決這個(gè)問(wèn)題。<a href="..." download></a>
而location.href
或location.replace
觸發(fā)的下載畜挨,暫無(wú)辦法解決筒繁。