Обслуживание загрузки файла с использованием PHP - PullRequest
1 голос
/ 07 мая 2010

Первый проект PHP, и я застрял!
Я хочу разрешить пользователям нажимать кнопку или ссылку и загружать файл.

Однако мой PHP должен сначала выполнить некоторые задачи, выбрать правильный файл, записать событие загрузки в БД и т. Д. Это я могу сделать, но как мне затем отправить файл в ответ на щелчок пользователя?

Спасибо за любую помощь.

Ответы [ 4 ]

2 голосов
/ 07 мая 2010

Как подсказывает @Sarfraz, после выполнения задач, которые вам нужно выполнить, вы можете отправить заголовок Content-Type в браузер, а затем вывести содержимое файла в браузер. После этого браузер будет работать в соответствии с пользовательскими настройками, которые обычно будут либо: а) открывать и отображать файл, либо б) сохранять файл на диск.

Если вы хотите принудительно сохранить файл на диске, а не отображать его в браузере, обычно используется способ указания типа mime Content-Type: application/octet-stream. Также можно указать имя файла вложения с заголовком Content-Disposition: attachment; filename=foobar.baz.

0 голосов
/ 12 мая 2010

Вот функция, которую можно использовать для отправки файлов прямо в браузер.

$fileName: путь + имя файла, который необходимо отправить в браузер $downloadName: это имя (без указания пути) файла, который пользователь видит при загрузке (не обязательно совпадает с $filename

 function sendFileDirectlyToBrowser($downloadName, $fileName) {
        if (! file_exists($fileName)) {
            throw new Exception('file does not exist!');
        }

        $pathInfo = pathinfo($fileName);

        //list with mime-types http://en.wikipedia.org/wiki/Mime_type#List_of_common_media_types

        switch (strtolower($pathInfo['extension'])) {
            case 'csv':
                header("Content-type: test/csv");
                break;
            case 'doc':
            case 'docx':
                header("Content-type: application/msword");
                break;
            case 'gif':
                header("Content-type: image/gif");
                break;
            case 'jpg':
            case 'jpeg':
                header("Content-type: image/jpeg");
                break;
            case 'png':
                header("Content-type: image/png");
                break;
            case 'pdf':
                header("Content-type: application/pdf");
                break;
            case 'tiff':
                header("Content-type: image/tiff");
                break;
            case 'txt':
                header("Content-type: text/plain");
                break;
            case 'zip':
                header("Content-type: application/zip");
                break;
            case 'xls':
            case 'xlsx':
                if(!(strpos($HTTP_USER_AGENT,'MSIE') === false)) {
                    header("Content-type:application/x-msdownload");
                }
                else {
                    header("Content-type:application/vnd.ms-excel ");
                }
                break;
        }


        header('Content-Disposition:attachment;filename="'  . $downloadName . '"');
        print file_get_contents($fileName);
    }
0 голосов
/ 07 мая 2010

header("Content-type: image/png"); (или что бы то ни было), и вы просто выводите файл.

0 голосов
/ 07 мая 2010

Отправьте соответствующий заголовок в вашем скрипте:

header("content-type: application/pdf");

Используйте правильный mime-type в соответствии с вашим файлом и отправьте содержимое в браузер, используя readfile.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...