Прикрепленный файл не скачивается, а открывается в браузере

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
yura1976
Сообщения: 134
Зарегистрирован: 2012.08.06, 13:24

Прикрепленный файл не скачивается, а открывается в браузере

Сообщение yura1976 »

На странице выводится ссылка на файл. Файлы - docx, pdf. При клике на "скачать" файл не скачивается, а открывается в виде крокозябр типа таких: "PK�LO_rels/.rels��MKA���C��l+����"Bo"�������3i���A �P��Ǽy���m���N���AêiAq0Ѻ0jx�=/"
Если обновить открывшуюся страницу с крокозябрами, то файл скачивается. Подскажите, пожалуйста, где может быть проблема.
В представлении:

Код: Выделить всё

foreach ($model->tenderfiles as $file):
                    echo Html::a(
                            Yii::t('tenders','TENDER_FILEDOWNLOAD').' <i class="glyphicon glyphicon-download-alt"></i>',
                            Url::to(['/tenders/tenders/download','fname'=> $file->filename]),
                            [
                                'class'=>"btn btn-download",
                                'target'=>"_blank"
                            ]
                    );
endforeach; ?>
В контроллере:

Код: Выделить всё

    public function actionDownload($fname) {
        $path = \Yii::getAlias('@uploads') ; ///var/www/www-root/data/www/site_name/web/uploads
        $file = $path . '/'.$fname;
        if (file_exists($file)) {
            return \Yii::$app->response->sendFile($file);
        }
        throw new \Exception('File not found');
    }

yura1976
Сообщения: 134
Зарегистрирован: 2012.08.06, 13:24

Re: Прикрепленный файл не скачивается, а открывается в браузере

Сообщение yura1976 »

yiiliveext писал(а): 2019.11.10, 17:11 'target'=>"_blank" - это уберите
Убрал. Не помогло
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Прикрепленный файл не скачивается, а открывается в браузере

Сообщение yiiliveext »

yura1976 писал(а): 2019.11.10, 17:16
yiiliveext писал(а): 2019.11.10, 17:11 'target'=>"_blank" - это уберите
Убрал. Не помогло
Смотрите какие заголовки возвращает. Проверьте также в разных браузерах.
В sendFile в опциях вручную задайте mimeType.
yura1976
Сообщения: 134
Зарегистрирован: 2012.08.06, 13:24

Re: Прикрепленный файл не скачивается, а открывается в браузере

Сообщение yura1976 »

Понял проблему. Изменил sendFile на xSendFile и все заработало.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Прикрепленный файл не скачивается, а открывается в браузере

Сообщение unknownby »

Можно попробовать вот так

Код: Выделить всё

public function actionInstruction()
    {
        $filename = 'manual.pdf'; //имя файла
        $filepath = \Yii::getAlias('@app') . "/templates/" . $filename; //путь к файлу
//если ПДФ то будет открываться в браузере, если ДОК файл, то пойдет на скачку. опция inline делает открытие в браузере.
        return \Yii::$app->response->sendFile($filepath, $filename, ['inline' => true]);
    }
Ответить