Codeigniter Force下载IE

时间:2011-02-25 01:33:09

标签: php pdf codeigniter force-download

我在下载助手方面遇到了麻烦...基本上我建立了一个动态创建pdf发票和pdf样张的网站,在这两种情况下,强制下载在firefox,chrome和opera中运行良好。在IE中它每次都失败,我收到以下错误: 无法从mysite.com下载$ filename

无法打开此Internet站点。请求的网站不可用或无法找到。请稍后再试。

要开始force_download,我有一个锚点目标_blank,其中包含一个指向以下控制器的URL:

        function view_uploaded_file($order = 0, $name = NULL){

        $this->load->helper('directory');

        $params['where'] = array('id' => id_clean($order));

        $data['order'] = $this->MOrders->get($params);

        if($data['order']->id < 1){

            redirect('admin/orders');

        }

        $name = db_clean(urldecode($name));

        $map = directory_map('./uploads/customer_order_uploads/'.$data['order']->user_id.'/'.$data['order']->id, 1);

        if(is_array($map) && in_array($name, $map)){

            $this->load->helper('download');

            $data = file_get_contents('./uploads/customer_order_uploads/'.$data['order']->user_id.'/'.$data['order']->id.'/'.urldecode($name));

            force_download($name, $data);

        } else {

            redirect('admin/orders');

        }

    }

最初我觉得MY IE可能有问题,但我可以在其他网站上下载PDF。然后我认为这可能是codeigniters下载助手的问题,但我看到他们已经在帮助器中为IE做了特殊规定。

如果您有任何想法,请告诉我。谢谢。

2 个答案:

答案 0 :(得分:2)

坦率地说,我不确定为什么我们会为代码点火器下载帮助而烦恼。

在纯php中做起来并不难:

This Wonderful Question/Answer概述了如何做得非常好。

要记住的真实内容是标题的content-disposition: attachment部分。它告诉浏览器该文件应该被下载&amp;保存与尝试在浏览器中显示它。

所有浏览器处理的方式都不一样,也许你的IE安装中有一些东西会覆盖这种行为,但是如果你按照链接文章中的说明进行操作,你在所有浏览器中正确下载文件。< / p>

基本上我们需要告诉浏览器有三件事:

  • 内容类型
  • 文件名
  • 如何处理传入的数据
  • (可选第四,如果你有)文件大小(内容长度)

然后你只是将数据转储到输出缓冲区。

<强>响应

在回复你的回复时,它可能是一个安全功能,不能在弹出窗口中自动下载内容,这可能是IE为解决以前的安全漏洞而引入的新功能之一。

答案 1 :(得分:1)

我发现至少暂时解决了这个问题。强制下载的所有链接都是目标_blank..once我创建了标准的非弹出链接文件下载在IE中工作。可能有一些类型的工作,但我也意识到无论如何都不需要下载弹出窗口......下载对话框已经达到了这个目的。