2011-02-25 199 views
1

我在ie下载助手的麻烦..基本上我建立了一个网站,动态创建pdf发票和pdf证明在这两种情况下强制下载在Firefox,铬和歌剧伟大的工程。在IE失败每次,我得到了以下错误: 无法下载从mysite.com $文件名Codeigniter强制下载IE

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

要开始force_download我有指导以下控制器URL的锚点目标_blank:

 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文件。然后,我认为这可能是一个代码下载助手的问题,但我看到他们已经在助手中为IE做了特别的规定。

如果您有任何想法,请让我知道。谢谢。

回答

2

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

这并不完全是很难在纯PHP做:

This Wonderful Question/Answer概述了如何做到这一点相当不错。

要记住的真实情况是标头的content-disposition: attachment部分。这是告诉浏览器该文件应该被下载&保存与试图在浏览器中显示它。

所有的浏览器在处理不同的事情,也许你有你的IE安装的东西是压倒一切的行为,但如果你遵循链接的文章中的说明,您应该得到正确地在所有浏览器下载的文件。

本质上有三样东西,我们需要告诉浏览器:

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

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

响应

针对您的答复,它可能是一个安全功能不会自动下载的东西在弹出窗口中,可能的新的事情之一即推出打击他们以前的安全漏洞。

1

那么我已经找到了至少一个问题的临时解决方案。我所有的强制下载链接的目标_blank ..我创建了标准的非弹出式链接文件下载在IE中工作。可能有一些类型的工作,但我也意识到,真的没有必要弹出窗口来下载。下载对话框已经达到了这个目的。

+0

您应该清理这个答案并标记为接受的答案让谁遇到在未来这个问题的人知道你是怎么解决它。 – Aren 2011-02-25 17:41:46