Как отдать файл на скачивание со стороннего сервера?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
hidebit
Сообщения: 7
Зарегистрирован: 2019.04.07, 16:09

Как отдать файл на скачивание со стороннего сервера?

Сообщение hidebit » 2019.04.26, 06:58

Здравствуйте, вопрос вроде не сложный но понять не могу, exe файл без проблем отдаёт простым выставлением ссылки download, а вот файлы типа txt открывает в браузере, чего не хотелось бы. Качать файл на сервер с другого сайта не совсем резонно, так как сайт чужой.
Как решить проблему куда копать то ?

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

    
    public function actionDownloadFile($file){
        //отключить профайлеры
        $this->disableProfilers();
        Yii::app()->request->sendFile(basename($file),file_get_contents($file));
    }
    
Файл скачивается но понятно что битый так как его нет на сервере. Нужен ещё какой-то метод.

hidebit
Сообщения: 7
Зарегистрирован: 2019.04.07, 16:09

Re: Как отдать файл на скачивание со стороннего сервера?

Сообщение hidebit » 2019.04.26, 07:48

Сделал вот так, не знаю насколько это правильно.

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

    
    public function actionFile(){
        $path_parts = pathinfo($_REQUEST['load']);
        if ($path_parts['basename']):
        		Yii::$app->response->sendContentAsFile(file_get_contents($_REQUEST['load']),$path_parts['basename']);
        	else: throw new NotFoundHttpException;
        endif;	
    }

hidebit
Сообщения: 7
Зарегистрирован: 2019.04.07, 16:09

Re: Как отдать файл на скачивание со стороннего сервера?

Сообщение hidebit » 2019.04.26, 07:54

Так но теперь перестала работать загрузка .exe файлов, делать проверку на тип файла ?

urichalex
Сообщения: 955
Зарегистрирован: 2015.08.07, 11:03

Re: Как отдать файл на скачивание со стороннего сервера?

Сообщение urichalex » 2019.04.26, 09:18

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

<a href="/path/to/file.txt" download>Скачать файл</a>

hidebit
Сообщения: 7
Зарегистрирован: 2019.04.07, 16:09

Re: Как отдать файл на скачивание со стороннего сервера?

Сообщение hidebit » 2019.04.26, 09:41

urichalex писал(а):
2019.04.26, 09:18

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

<a href="/path/to/file.txt" download>Скачать файл</a>
Да в том и дело, что файлы хранятся на стороннем сервере. Exe файл вашим способом он отдаст, а вот txt открывает в самом браузере. И вот как в этом случае поступить ? Проверять extension?

hidebit
Сообщения: 7
Зарегистрирован: 2019.04.07, 16:09

Re: Как отдать файл на скачивание со стороннего сервера?

Сообщение hidebit » 2019.04.26, 09:50

Т.е. у меня сейчас формируются две вот такие ссылки.

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

<a rel="nofollow" target="_blank" href="/file?load=https%3A%2F%2Fwww.autohotkey.com%2Fdownload%2Fahk-install.exe">Скачать</a> 
и <a rel="nofollow" target="_blank" href="/file?load=https%3A%2F%2Fhidebit.ru%2Fupload%2FArmia_Bindy_A_Belov.ahk">Скачать</a>
И написан обработчик для скачивания

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

   public function actionFile(){
        $path_parts = pathinfo($_REQUEST['load']);
        if ($path_parts['basename']):
        		Yii::$app->response->sendStreamAsFile($query,$path_parts['basename']);
        	else: throw new NotFoundHttpException;
        endif;
    }
1. файл он не отдаст
2. файл он нормально скачивает.
Вот как всё сделать так чтобы он отдавал корректно оба файла.

urichalex
Сообщения: 955
Зарегистрирован: 2015.08.07, 11:03

Re: Как отдать файл на скачивание со стороннего сервера?

Сообщение urichalex » 2019.04.26, 10:14

http://htmlbook.ru/html/a/download
Не важно где лежит файл. Это поведение браузера

Ответить