LINUX.ORG.RU

Как сделать загрузку файла с сервера HTTP по относительной ссылке?

 , ,


0

1

Здравствуйте, коллеги!

Возможно, я не верно формулирую вопрос, но не знаю как задать его правильно.

Типа:

wget https://myserver.com/Z49CLJGaNJTFizE

кракозябры из запроса это временная ссылка на некий файл. Должен скачаться файл video.img

Хочу понять как реализовать нечто подобное


Ответ на: комментарий от goingUp

Для php, если файл небольшой, можно просто file_get_contents(‘https://myserver.com/Z49CLJGaNJTFizE’), если большой fopen/fread кусочками, или функции curl_*

Я понять не могу как это работает.

Когда идет прямая ссылка на файл, то все понятно. Отдача его происходит средствами Apache | Nginx. А как отдать нужный файл по кракозябрам из запроса??

HighMan
() автор топика
Ответ на: комментарий от Goury

https://requests.readthedocs.io/en/latest/

Это же просто ссылка на документацию по requests.

В ней, наверняка, есть то что мне нужно, но придется перелопатить ее целиком(

Напишите, хотя бы, как называется эта технология?

HighMan
() автор топика
Ответ на: комментарий от HighMan

Тебе нужно скачать этот файл, или отдать?

Нужно что бы пользователь смог скачать файл по подобной ссылке.

Вот я и хочу понять как реализовать это на сервере.

HighMan
() автор топика
Ответ на: комментарий от goingUp

Проще всего, если у тебя nginx выдать http заголовок X-accel-redirect, и nginx выдаст файл. Детали можно нагуглить.

Ага. Спасибо!

Кое что стало проясняться!

HighMan
() автор топика
Ответ на: комментарий от eternal_sorrow

Ну чтобы путь был таки истинный, нужно еще добавить заголовок Content-Type, читать и выдавать файл кусочками, а не сразу и чтобы работала докачка нужно выдать заголовок Accept-Ranges и обрабатывать заголовок Range)

goingUp ★★★★★
()

Похоже на сервис коротких ссылок. У нас была БД, в которую на бэк-ссылку генерились короткие фронт-ссылки. А вот как оно там подхватывалось и подменялось, я не помню.

targitaj ★★★★★
()

Тут тебе наотвечали всякого но вообще тебе нужно написать простое веб приложение которое по заданному адресу отдает заданный файл. Банальный пример на пыхе самой сложной части

<?php

set_time_limit(0); // отключаем время жизни скрипта (а то может не успеть скачаться у клиента за стандартную минуту)
$path = '/path/to/file/' // как сопоставить урл вебсервера и файл думаю сам сможешь нагуглить
$fileName = 'video.img';

$fh = fopen($path . $file, 'r');


header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $fileName . '"');

$maxRead = 1 * 1024 * 1024; // 1MB за раз читаем что бы по памяти не сдохнуть

while (!feof($fh)) {
    echo fread($fh, $maxRead);

    ob_flush();
}


exit;

пысы: даже не запускал, тестируй и отлаживай сам

Noob_Linux ★★★★
()
Последнее исправление: Noob_Linux (всего исправлений: 1)