2013-01-23 90 views
1

我有以下的jQuery:下載file_get_content響應

$(".download").click(function(){  
    $.post('get_bot.php', "url_code="+url_code, function (response) { 
    alert(response); 
    }); 
}); 

url_code是具有URL的JSON結構變量,這裏是回報活生生的例子: https://services.sapo.pt/Codebits/botmake/01,02,03,04,05,06,07,08,I%20Rule

這些數字參數以生成不同的圖像。

在我get_bot.php頁我做:

$urlc=$_POST['url_code']; 
$bot = file_get_contents($urlc); 
header("content-type: image/png"); 
echo $bot; 

我在找到辦法如何讓爲.png文件下載的響應,所以當用戶點擊。下載有一個下載窗口提示與.png文件。

傳遞一個正確的URL和呼應file_get_content結果似乎正常工作(雖然如果我嘗試點擊右鍵並保存圖像,它實際上節省了PHP文件...)

任何幫助,這將非常棒,我對json結構不是很熟悉,到目前爲止,我只處理數組結構,從來沒有圖像輸出。

我知道我可能路要走這裏得到一個實際的結果,但任何指針將不勝感激。

+0

你爲什麼不使用此直接PHP的時候什麼都不做,除了返回URL的內容? –

+0

爲什麼你不重定向到網址?使用'header(「Location:」。$ urlc);'在第二行 – ksg91

回答

4

RFC2616說明你需要做什麼。基本上,你需要添加

Content-Disposition: attachment; filename="fname.ext" 

如果我沒有弄錯頭部的話。

編輯 這裏是一個示例腳本。我已經確認這在我的兩臺服務器上有不同的設置。

<?php 
    header("content-type: image/jpg"); 
    header("Content-Disposition: attachment; filename='pic.jpg'"); 
    readfile('http://lorempixel.com/400/200/'); 
?> 
+0

Just header('Content-Disposition:attachment; filename ='picture.png'');並回音$機器人?沒有得到文件下載響應。 –

+0

我剛測試過這個,它適用於我。確保如果你在'header(「」)中使用雙引號'在文件名='''周圍使用單引號來防止語法錯誤。 – jurgemaister

+0

謝謝,明白了不使用AJAX的所有工作,我只是點了用戶get_bot?BOT =(數字PARAMS這裏),並使用$ _GET檢索PARMS。 –

0

只需使用此功能,您get_bot.php開始下載一個文件,而不是顯示在瀏覽器,它的(應該工作的跨瀏覽器):

function download($file, $path) 
{ 
    $size = filesize($path.$file); 

    @ob_end_clean(); 

    if(ini_get('zlib.output_compression')) 
    ini_set('zlib.output_compression', 'Off'); 

    header('Content-Type: application/force-download'); 
    header('Content-Disposition: attachment; filename="'.basename($file).'"'); 
    header("Content-Transfer-Encoding: binary"); 
    header('Accept-Ranges: bytes'); 
    header("Cache-control: no-cache, pre-check=0, post-check=0"); 
    header("Cache-control: private"); 
    header('Pragma: private'); 
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 

    if(isset($_SERVER['HTTP_RANGE'])) 
    { 
     list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2); 
     list($range) = explode(",",$range,2); 
     list($range, $range_end) = explode("-", $range); 
     $range=intval($range); 
     if(!$range_end) { 
      $range_end=$size-1; 
     } else { 
      $range_end=intval($range_end); 
     } 

     $new_length = $range_end-$range+1; 
     header("HTTP/1.1 206 Partial Content"); 
     header("Content-Length: $new_length"); 
     header("Content-Range: bytes $range-$range_end/$size"); 
    } else { 
     $new_length=$size; 
     header("Content-Length: ".$size); 
    } 

    $chunksize = 1*(1024*1024); 
    $bytes_send = 0; 
    if ($file = fopen($path.$file, 'rb')) 
    { 
     if(isset($_SERVER['HTTP_RANGE'])) 
     fseek($file, $range); 

     while 
      (!feof($file) && 
      (!connection_aborted()) && 
      ($bytes_send<$new_length)) 
     { 
      $buffer = fread($file, $chunksize); 
      print($buffer); 
      flush(); 
      $bytes_send += strlen($buffer); 
     } 
    fclose($file); 
    } else die('Error - can not open file.'); 

die(); 
}