我在下载助手方面遇到了麻烦...基本上我建立了一个动态创建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做了特殊规定。
如果您有任何想法,请告诉我。谢谢。
答案 0 :(得分:2)
坦率地说,我不确定为什么我们会为代码点火器下载帮助而烦恼。
在纯php中做起来并不难:
This Wonderful Question/Answer概述了如何做得非常好。
要记住的真实内容是标题的content-disposition: attachment
部分。它告诉浏览器该文件应该被下载&amp;保存与尝试在浏览器中显示它。
所有浏览器处理的方式都不一样,也许你的IE安装中有一些东西会覆盖这种行为,但是如果你按照链接文章中的说明进行操作,你应在所有浏览器中正确下载文件。< / p>
基本上我们需要告诉浏览器有三件事:
然后你只是将数据转储到输出缓冲区。
<强>响应强>
在回复你的回复时,它可能是一个安全功能,不能在弹出窗口中自动下载内容,这可能是IE为解决以前的安全漏洞而引入的新功能之一。
答案 1 :(得分:1)
我发现至少暂时解决了这个问题。强制下载的所有链接都是目标_blank..once我创建了标准的非弹出链接文件下载在IE中工作。可能有一些类型的工作,但我也意识到无论如何都不需要下载弹出窗口......下载对话框已经达到了这个目的。