Страница 1 из 1

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

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

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

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

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

Добавлено: 2019.04.26, 07:48
hidebit
Сделал вот так, не знаю насколько это правильно.

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

    
    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;	
    }

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

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

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

Добавлено: 2019.04.26, 09:18
urichalex

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

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

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

Добавлено: 2019.04.26, 09:41
hidebit
urichalex писал(а): 2019.04.26, 09:18

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

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

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

Добавлено: 2019.04.26, 09:50
hidebit
Т.е. у меня сейчас формируются две вот такие ссылки.

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

<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. файл он нормально скачивает.
Вот как всё сделать так чтобы он отдавал корректно оба файла.

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

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