php 点击按钮自动下载,IE下有问题,求解答!

直接看代码!

test.php

<?php
    include_once('index.php');
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <a href="#" id="btn">点击下载</a>
    <script type="text/javascript">
        var str = "data:image/png;base64,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";
        function $urlEncode(str){//直接post,浏览器会把+号转了的,这里有坑
            if(str && str.length){
                return escape(str).replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace(/\//g,'%2F');
            }
            return "";
        }
        document.getElementById('btn').onclick = function(){
            document.getElementById('btn').setAttribute('href','test.php?file='+ $urlEncode(str));
        }
    </script>
</body>
</html>

index.php

<?php
$base64_url = urldecode($_GET['file']);//先解码
if($base64_url){
    define('WWWROOT',  dirname(__FILE__).'\\');
    $base64_url = preg_replace('/\s/', '+', $base64_url);//空格变+号
    $base64_body = substr(strstr($base64_url,','),1);
    $rand = rand(100, 999); 
    $pics = date("YmdHis") . $rand . $type; //命名图片名称 
    $filename = './'.$pics.'.jpg';
    $name = $pics.'.jpg'; 
    $img = base64_decode($base64_body);//解码
    $a = file_put_contents($filename, $img);//图片字节
    $path = WWWROOT.$name;//完整的文件保存路径
    $src = 'http://127.0.0.1/download/'.$name;//完整的图片url路径
    header("Cache-Control: no-cache");
    header("Pragma: no-cache");
    header("Expires: 0"); 
    header('Cache-Control: public, must-revalidate, max-age=0');
    header('Accept-Ranges: bytes');
    header("Content-Type: application/force-download");  
    header("Content-Type: application/download");  
    header("Content-Transfer-Encoding: binary");  
    header("Content-type: application/octet-stream");  
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); //不加的话,IE中会提示目标主机无法访问 
    header('Pragma: public'); //不加的话,IE中会提示目标主机无法访问 
    header("Content-Length: ".filesize($path));  
    header("Content-Disposition: attachment; filename=$name");  
    $fp = fopen($src, 'rb');  
    fpassthru($fp);  
    fclose($fp);
    if(file_exists($path)){//然后把图片删除掉
        unlink($path);
        exit;
    }
}    
?>

亲测,chrome 和 火狐都没问题。但是在IE下有bug,求大牛指点!

posted on 2015-01-29 17:35  violinxliu  阅读(487)  评论(0编辑  收藏  举报