最近有個需求,下載資源服務器的圖片,找了各種辦法去下載,都未能實現,最後不得已,寫下了如下方法,先用服務器去獲取資源,將圖片保存再服務器上,再去下載
前端代碼
onClick:function(){
if(confirm( '是否下載當前圖片! ')==true){
var reg = /(?<=(src="))[^"]*?(?=")/ig;
var str =$('.swiper-slide-active').children('span').children('img').attr('src');
$.ajax({url:"/reward/apply/download?filename="+str,type:'get',success:function(res){
var url = "/img/"+res;
var a = document.createElement('a'); // 創建一個a節點插入的document
var event = new MouseEvent('click') // 模擬鼠標click點擊事件
a.download = res // 設置a節點的download屬性值
a.href = url; // 將圖片的src賦值給a節點的href
a.dispatchEvent(event); // 觸發鼠標點擊事件
}});
};
}
後端php
public function download(){
$url = 'http:'.$_GET['filename'];
$state = @file_get_contents($url,0,null,0,1);//獲取網絡資源的字符內容
if($state){
$filename = rand(1000,9999).'.jpg';//文件名稱與路徑
ob_start();//打開輸出
readfile($url);//輸出圖片文件
$img = ob_get_contents();//得到瀏覽器輸出
ob_end_clean();//清除輸出並關閉
$size = strlen($img);//得到圖片大小
$fp2 = @fopen('./img/'.$filename, "a");
fwrite($fp2, $img);//向當前目錄寫入圖片文件,並重新命名
fclose($fp2);
echo $filename ;
exit;
}
}