告诉浏览器在Codeigniter中打开或下载文件
问题描述:
在Codeigniter中,我们可以使用下载助手中的force_download($file_name,$data)
函数强制浏览器下载文件。告诉浏览器在Codeigniter中打开或下载文件
但是这不是我所需要的,我希望Codeigniter以该文件对应的MIME类型响应一个http头,以便浏览器可以或不可以下载该文件,具体取决于是否有应用程序在客户端机器上注册该MIME类型(如果有的话,该应用程序将打开该文件)。
有没有办法用Codeigniter做到这一点?
非常感谢大家。
答
不,你不能用Codeigniter做到这一点。
一般来说,使用像PHP这样的服务器端技术,您只能将内容发送到客户端,而不能直接与客户端交互。客户可以根据您发送的任何内容来做他们想做的事情。即使使用像javascript这样的客户端工具,(幸好)您只能与客户端计算机进行有限的交互。你想要做的是让一个网站(自动)访问,下载一个软件,并在客户端机器上执行它...
这就是所谓的恶意软件......(由制造商带给你的ActiveX)
以上是直接回应
” ......这样浏览器可能会或可能不会下载文件,这取决于是否有针对MIME注册的应用类型上客户机(如果有的话,该应用程序将打开该文件)
UPDATE
可以设置通过普通的PHP头操纵mime类型。作为第一个示例,以下示例直接来自php header()
documentation。
<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');
// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// The PDF source is in original.pdf
readfile('original.pdf');
?>
不是真的恶意软件,用户上传了一些文件,我把它们放在webroot之外的地方。用户只能下载他/她已上传的文件。所以我在Codeigniter中创建了一个路由,并且在控制器的相应功能中,我只在他们已经登录(认证)时才为他们提供文件。我正在使用file_get_contents来读取文件,现在我需要一个像force_download这样的函数来告诉浏览器下载/打开文件,就好像该文件是从webroot提供的一样。 – bobo 2011-02-15 21:53:37