Ответ Yii2 sendfile

Я новичок в Yii2 и был бы очень признателен, если бы кто-нибудь помог мне решить эту проблему. Я хочу сделать ссылку для скачивания и использую

Yii::$app->response->sendFile($path, $name, ['inline' => false])->send();

в функции загрузки, но он просто читает содержимое файла и отображается прямо на странице. Что я хочу сделать, так это когда пользователи нажимают ссылку для загрузки, появляется диалоговое окно загрузки или файл загружается автоматически, а не отображает содержимое. Кто-нибудь может мне помочь, пожалуйста!


person tutulang    schedule 13.05.2015    source источник
comment
Вероятно, это вообще не связано с Yii2, но связано с тем, что ваш браузер никогда не получал тип MIME или не распознает его. Какой тип контента вы пытаетесь отправить? Возможно, используйте firebug или инструменты отладки вашего браузера, чтобы проверить, получен ли MIME-тип.   -  person Blizz    schedule 13.05.2015


Ответы (4)


У меня была точно такая же проблема. Оказалось, что моя ссылка на действие загрузки была помещена внутри Pjax::begin() Pjax::end() методов, поэтому содержимое файла было обработано как обновление для страницы.

Мое решение: добавить атрибут data-pjax="0" к ссылке для скачивания.

person Marcin    schedule 30.09.2015
comment
Хорошая работа. Я не знал, что Pjax может помешать загрузке. - person Francis Ngueukam; 08.08.2017
comment
Следует выбрать как настоящий ответ. Большое спасибо! - person Prabowo Murti; 04.05.2021

Что вы можете сделать, так это использовать функцию заголовка php:

public function actionDownload() {
    $file = $_GET["file"];
    $name = str_replace('files/prices/', '', $file);

    header("Content-Disposition: attachment; filename=\"" . urlencode($name) . "\"");
    header("Content-Type: application/pdf");
    header("Content-Description: File Transfer");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: " . filesize($file));

    ob_clean();
    flush();

    readfile($file);
}

А затем вызовите ссылку, например, с отметкой времени: http://page.com/download?file=files/prices/sillas.pdf&ts=1490725032

person Mariano Andres Echeverria    schedule 28.03.2017

Вместо того :

 sendFile();

Пытаться :

xSendFile()
person Red Bottle    schedule 29.03.2017

person    schedule
comment
Прочтите stackoverflow.com/help/how-to-answer и предложите дополнительную информацию о том, как работает ваш код. и как это решит вопрос. - person Unbranded Manchester; 19.06.2020