Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   как передать новый url на скачку файла (https://javascript.ru/forum/server/45473-kak-peredat-novyjj-url-na-skachku-fajjla.html)

jobmsk 02.03.2014 16:31

как передать новый url на скачку файла
 
есть ссылка на файл типа :
http://sait1.ru/download.php?url=название_файла.txt

как сделать чтобы скрипт в download.php выдавал ссылку на скачку файла с другого домена , типа:

http://sait2.ru/название_файла.txt
ну и ,чтобы у клиентский браузер сохранял файл с тем же названием...

danik.js 03.03.2014 01:45

Цитата:

Сообщение от jobmsk
как сделать чтобы скрипт в download.php выдавал ссылку на скачку файла с другого домена

<?
var url = 'http://sait2.ru/' + $_GET['url'];
echo "<a href='$url'>сцылко</a>";
Цитата:

Сообщение от jobmsk
ну и ,чтобы у клиентский браузер сохранял файл с тем же названием...

А это никак. Это только sait2.ru может сделать.

jobmsk 03.03.2014 02:40

Цитата:

Сообщение от danik.js (Сообщение 300427)
<?
var url = 'http://sait2.ru/' + $_GET['url'];
echo "<a href='$url'>сцылко</a>";

а , ну так это с редиректом получится, а так чтобы без него?

danik.js 03.03.2014 04:27

Цитата:

Сообщение от jobmsk
а , ну так это с редиректом получится, а так чтобы без него?

Каким еще редиректом? Ты просил ссылку - скрипт выдаст ссылку. Проблемы?

jobmsk 03.03.2014 15:27

возможно не так сформулировал, уточняю - нужно чтобы при клике на http://sait1.ru/download.php?url=название_файла.txt не новая ссылка вылезала , а сразу загрузка начиналась но уже по новой ссылке http://sait2.ru/название_файла.txt

danik.js 03.03.2014 18:21

Чтоб задать имя скачиваемого файла нужно выстовить http-заголовок Content-Disposition вроде бы.

Ну а сам файл запрашиваешь через fopen fread (если не отключена фишка работы с файлами по http) и отправляешь в stdout. Запросить еще можно через cURL

jobmsk 03.03.2014 19:21

как подсунуть имя файла более менее ясно, но вот как подсунуть ссылку для скачивания причем так чтобы файл не закачивать локально, а просто дать какачть напрямую, но по новой ссылке?

danik.js 03.03.2014 20:33

Можешь сделать редирект на URL файла. Но тогда не сможешь форсировать закачку, ибо txt-файл браузер скорее всего не предложит сохранить, а вместо этого отобразит его содержимое. Если сервер форсирует сохранение файла (через Content-Disposition), то проблема отпадает.

jobmsk 03.03.2014 20:48

Цитата:

Сообщение от danik.js (Сообщение 300714)
Если сервер форсирует сохранение файла (через Content-Disposition), то проблема отпадает.

так в этом и вопрос, как без редиректа это сделать......если ссылка локальная то все работает...а как ссылку с другого ресурса через header подсунуть?

danik.js 03.03.2014 21:01

Ты либо через соединение со своим сервером передаешь данные (то есть читаешь удаленный файл и отдаешь браузеру данные) - то есть играешь роль прокси. Либо ты редиректишь браузер на другой сервер и он соединяется с ним и качает с него. Других вариантов нет.

jobmsk 03.03.2014 21:24

ясно я так и думал , что без редиректа не обойтись

danik.js 03.03.2014 21:40

Ты слепой? Я два варианта написал. Можно обойтись без редиректа.

kostyanet 04.03.2014 04:37

На js наверно без редиректа. Пишите атрибут download в a href с другого сайта на своем сайте.

danik.js 04.03.2014 04:51

Цитата:

Сообщение от kostyanet
атрибут download

Поддержка крайне хреновая: http://caniuse.com/#feat=download

jobmsk 04.03.2014 14:03

Цитата:

Сообщение от kostyanet (Сообщение 300813)
На js наверно без редиректа. Пишите атрибут download в a href с другого сайта на своем сайте.

нет href с другого не вариант!

пытаюсь резюмировать:
правильно ли я понял, что без предварительной загрузки файла выдать ссылку на другой сайт через header( .....) не получится?

danik.js 04.03.2014 14:15

Что ты понимаешь под "предварительной загрузкой"? Тебе не обязательно хранить файл у себя на сервере. Но трафик придется через сервер пропустить. В этом и суть "прокси".

jobmsk 05.03.2014 14:35

Цитата:

Сообщение от danik.js (Сообщение 300899)
В этом и суть "прокси".

это понятно, но все же хотелось бы без прокси решение, а просто выдавать правильную ссылку для браузера

danik.js 05.03.2014 14:45

Ну дык и выдавай. В чем проблема? Но тогда ты не сможешь изменить имя файла (кроме как через атрибут download, который работает не во всех браузерах)

jobmsk 12.03.2014 16:28

так вопрос как выдавать...

вот кликнули на ссылку http://sait1.rudownload.php?url=название_файл а.txt

какой код нужн в download.php,
чтобы у юзера в браузере открылся диалог на скачку но уже по ссылке http://sait2.ru/название_файла.txt

danik.js 12.03.2014 17:38

Ну так делай редирект на нужный URL. Вот только форсировать скачку ты уже не сможешь. Если sait2 форсирует - ок. Если нет, то на усмотрение браузера файл может открыться для просмотра прямо в браузере.

Vlasenko Fedor 13.03.2014 05:02

header("HTTP/1.1 200 OK");
        header("Connection: close");
        header("Content-Type: application/octet-stream");
        header("Accept-Ranges: bytes");
        header("Content-Disposition: Attachment; filename=screen.jpg"); //screen.jpg - имя файла
//получаем с помощью curl и отдаем на загрузку
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, 'http://YouPath/FileName'); //указываем путь к внешнему ресурсу
        $data = curl_exec($ch);
        curl_close($ch);
        echo $data;
        exit;

danik.js 13.03.2014 12:36

Понимаешь, тс хочет и рыбку съесть, и в воду не лезть, так что твой вариант не подойдет )


Часовой пояс GMT +3, время: 01:16.