1

我在ie中的下载助手遇到问题..基本上我建立了一个网站,在这两种情况下动态创建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');

        }

    }

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

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

4

2 回答 2

2

坦率地说,我不确定为什么我们要在代码点火器中使用帮助器来下载。

在纯 php 中并不完全难以做到:

这个奇妙的问题/答案概述了如何很好地做到这一点。

真正要记住的是content-disposition: attachment标题的部分。这就是告诉浏览器应该下载和保存文件而不是试图在浏览器中显示它的原因。

所有浏览器的处理方式都不同,也许您的 IE 安装中有一些东西覆盖了该行为,但如果您按照链接文章中的说明进行操作,您应该在所有浏览器中正确下载文件。

本质上,我们需要告诉浏览器三件事:

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

然后,您只需将该数据直接转储到输出缓冲区。

回复

作为对您的回复的回应,它可能是一项安全功能,不会在弹出窗口中自动下载某些内容,这可能是 IE 为解决之前的安全漏洞而引入的新功能之一。

于 2011-02-25T01:44:38.357 回答
1

好吧,我至少找到了解决该问题的临时方法。我所有的强制下载链接都是目标 _blank..一旦我创建了标准的非弹出链接,文件下载就可以在 IE 中工作。可能有某种解决方法,但我也意识到无论如何都不需要弹出窗口来进行下载..下载对话框已经达到了这个目的。

于 2011-02-25T04:40:16.370 回答