我有以下jquery:
$(".download").click(function(){
$.post('get_bot.php', "url_code="+url_code, function (response) {
alert(response);
});
});
url_code是一个包含json结构url的变量,这里是return的实例: 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文件下载方式获取响应,因此当用户点击.download时,会出现一个带有.png文件的下载窗口提示。
传入正确的url并回显file_get_content结果似乎工作正常(尽管如果我尝试右键单击并保存图像,它实际上会保存php文件...)
对此有任何帮助都很棒,我对json结构不是很有经验,到目前为止我只处理数组结构,而不是图像输出。
我知道我可能会在这里获得实际结果,但任何指针都会受到赞赏。
答案 0 :(得分: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/');
?>
答案 1 :(得分: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();
}