Указание браузеру открыть или загрузить файл в Codeigniter

В Codeigniter мы можем использовать функцию force_download($file_name,$data) из помощника загрузки, чтобы заставить браузер загрузить файл.

Но это не то, что мне нужно, я бы хотел, чтобы Codeigniter отвечал на http-заголовок типом MIME, которому соответствует файл, чтобы браузер мог или не мог загрузить файл, в зависимости от того, зарегистрировано ли приложение для этого MIME введите на клиентском компьютере (если он есть, это приложение откроет этот файл).

Есть ли способ сделать это с помощью Codeigniter?

Большое спасибо всем вам.


person bobo    schedule 15.02.2011    source источник


Ответы (1)


Нет, вы не можете сделать это с Codeigniter.

Вообще говоря, с серверными технологиями, такими как PHP, вы можете только отправлять контент клиенту, но не напрямую взаимодействовать с клиентом. Клиент может делать то, что он хочет, с любым фрагментом контента, который вы ему отправляете. Даже с инструментами на стороне клиента, такими как javascript, (к счастью) вы можете иметь только ограниченное взаимодействие с клиентским компьютером. То, что вы хотите сделать, это разрешить веб-сайту (автоматически) при посещении загружать часть программного обеспечения и выполнять его на клиентской машине...

это называется вредоносным ПО... (предоставлено вам создателями ActiveX)

Выше был прямой ответ на

"...so that the browser may or may not download the file, depending on whether there is an application registered for that MIME type on the client machine (if there is one, that application will open that file).

ОБНОВЛЕНИЕ

Вы можете установить тип mime с помощью простой манипуляции с заголовком php. Следующий пример взят непосредственно из header() документации php в качестве первого примера.

<?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');
?>
person jondavidjohn    schedule 15.02.2011
comment
На самом деле это не вредоносное ПО, пользователи загрузили несколько файлов, и я поместил их за пределы корневого каталога. Пользователь может загружать только те файлы, которые он загрузил. Поэтому я создал маршрут в Codeigniter и внутри соответствующей функции в контроллере, я отдаю им файлы, только если они вошли в систему (аутентифицированы). Я использую file_get_contents для чтения в файле, и теперь мне нужна функция, такая как force_download, которая сообщает браузеру загружать/открывать файл, как если бы файл обслуживался из веб-корня. - person bobo; 16.02.2011
comment
Поэтому я хотел бы знать, предоставил ли CI такую ​​​​функцию, которая отправляет файл в клиентский браузер (указав правильный для меня MIME в заголовке ответа http) и позволяет браузеру решать, что с ним делать. Проблема force_download заключается в том, что он заставляет браузер загружать файл (а это не то, что мне нужно), используя тип MIME, который обычно не регистрируется ни одним приложением на клиентском компьютере. - person bobo; 16.02.2011
comment
Я создал массив отображения MIME в application/config/mimes.php в Codeigniter, в сочетании с вашими кодами PHP должно быть очень легко написать функцию, которая точно достигает того, что мне нужно. - person bobo; 20.02.2011