2011-02-15 162 views
1

在Codeigniter中,我们可以使用下载助手中的force_download($file_name,$data)函数强制浏览器下载文件。告诉浏览器在Codeigniter中打开或下载文件

但是这不是我所需要的,我希望Codeigniter以该文件对应的MIME类型响应一个http头,以便浏览器可以或不可以下载该文件,具体取决于是否有应用程序在客户端机器上注册该MIME类型(如果有的话,该应用程序将打开该文件)。

有没有办法用Codeigniter做到这一点?

非常感谢大家。

回答

6

不,你不能用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'); 
?> 
+0

不是真的恶意软件,用户上传了一些文件,我把它们放在webroot之外的地方。用户只能下载他/她已上传的文件。所以我在Codeigniter中创建了一个路由,并且在控制器的相应功能中,我只在他们已经登录(认证)时才为他们提供文件。我正在使用file_get_contents来读取文件,现在我需要一个像force_download这样的函数来告诉浏览器下载/打开文件,就好像该文件是从webroot提供的一样。 – bobo 2011-02-15 21:53:37