第一種方式(使用a標籤,且url就是文件下載地址):php
<a href = "http://localhost/upload/文件名">文件名</a> //點擊該鏈接後會自動下載
優勢:簡單、方便、快捷、代碼量最小ajax
缺點:下載下來的文件與路徑名始終保持一致,沒法由程序分別指定,且一旦文件不存在,就會跳轉或刷新頁面app
第二種方式(使用a標籤,url指向php控制器,由php設置header後進行下載)編碼
<a href="<?php echo "http://myController/download? file_url=$file_url&file_realname=$file_realname":'');?>"><?php echo $file_realname;?></a> //點擊該鏈接後會自動下載
在myController的download()方法中進行header設置url
$file_url = request('file_url'); $file_realname = request('file_realname'); $base_url = base_url(); $file = dirname(__FILE__).'/../../'.str_replace($base_url,'',$file_url); if(!file_exists($file)){ echo "<script>alert('文件不存在')</script>"; return; }else{ header("Content-type:application/octet-stream"); header("Content-Disposition:attachment;filename = ".$file_realname); header("Accept-ranges:bytes"); header("Accept-length:".filesize($file)); readfile($file); }
優勢:能夠用代碼控制文件名的顯示,並且能夠在下載以前執行一些列操做spa
缺點:一旦文件不存在,就會跳轉或刷新頁面code
第三種方式(使用ajax代替a標籤,ajax訪問php控制器,由php設置header後進行下載)ip
具體方法和方式二差很少,就是改爲ajax,這裏省略...it
優勢:由於是ajax,因此即便文件不存在,也不會跳轉到其餘頁面,徹底能夠在js中控制io
缺點:目前ajax對中文編碼支持不太好,因此若是文件名用的是gbk或gbk2312那就比較麻煩了,最好都是統一的UDF8