170 похожих чатов

Доброе утро, ребята! Столкнулся с тем, что не выходит с помощью

стандартных методов Laravel отдать файл. Всегда получаю ошибку

"Symfony \ Component \ HttpFoundation \ File \ Exception \ FileNotFoundException
The file "..." does not exist.

Отдать файл пытаюсь в методе контроллера такими способами:

- return response()->download($link);
и
- return \Illuminate\Support\Facades\Storage::disk(...)->download($link, 'test.txt');

Оба возвращают одну и ту же ошибку. Гуглил - но во всех темах у авторов была проблема при построении ссылки.
Я же перейдя по своей ссылке напрямую в браузере успешно "стартую" скачивание файла. + для чистоты эксперемента попробовал захардкодить ссылку на какой-нибудь общедоступный файл в интернете, чтобы полностью исключить проблему битой ссылки.

Подскажите, пожалуйста, в чем может быть проблема? I

P.S. При этом старый-добрый exit(readfile($link));
успешно работает. То есть, дело точно не в битой ссылке.

12 ответов

25 просмотров
Sergio-K. Автор вопроса

Что интересно, после замены return response()->download($link); на return response()->redirectTo($link); ошибка исчезла и файл успешно скачивается. Но это же костыль какой то) Похоже на баг... P.S. версия Laravel - 5.8.

Так $link что содержит, скорее все протокол http тоже, а должен путь до файла на диске.

А зачем файл через вай сервер передавать? Это лишняя нагрузка. А вобще когда то делал так: скачал файл насервер и потом отдавал пользователям. Удалял его не сразу. Это типо кеширования. Если частотзапрашивается файл, то его и храню у себя. Через несколько дней не обращений - удаляю.

Sergio-K. Автор вопроса

Файлы хранятся на s3, но хочу управлять доступом, поэтому, пользователь получает ссылки на мой сервис, а уже отсюда отдаю файл с s3. При этом хотелось бы обойтись без доп. системы управления файлами (следить, чтобы старые удалялись). Пока склоняюсь к варианту exit(readfile($link)). Он и файл отдаёт успешно и на оставляет копию на самом сайте. Боюсь, только на ревью получу по шапке за «не Laravel way” ) Поэтому, круто было бы обнаружить нечего похожее в самом фреймворке.

Readfile не увлекайся. Если музыку отдавать, то еще можно (т.е. до 10мб) а дальше не желательно. Если фильмы, то не используй такое решение.

Sergio-K. Автор вопроса

Не, не, у нас тут текстовые файлы до 5 мегабайт. На оперативку нагрузки большой не должно быть. А я правильно понимаю, что есть только два варианта: - жертвовать оперативной памятью и отдавать с помощью readfile() И - выкачивать предварительно файлы в проект и отдавать уже оттуда, что потребует писать доп. систему удаления устаревших файлов и прочее?

Да. Но с доп системой можно еще разные фишки делать, например, вип пользователям отдачу файлов по скорости не ограничивать. Но в вашем случаи это не нужно. Файлы и так маленькие. У меня был опыт такой. Отдача музыки. Сначала через readfile отдавал, а потом уже переделал под закачку на свой сервер. Ресурсов много економилось. Суточная посещаемость сайта была 8-10к. В пиках сидело и качало около 200-300 чел.

Берешь вот это и голова про кэш не болит: https://flysystem.thephpleague.com/v1/docs/advanced/caching/

А почему нельзя сделать все файлы на с3 не публичными , а пользователю просто отдавать временную ссылку на файл, которая даст скачать файл по ней только один раз, у Амазона есть замечательное СДК для этого 🤷‍♂️😅

Sergio-K. Автор вопроса

У нас не Амазон, но идея отличная. Спасибо! Посмотрю, есть ли у нашего S3 нечто подобное.

Ясно, на если учесть что все бакеты от других сервисов , типа didgitalocean юзают тулзы написанные под Амазон, только blob azure (говномайкрософт) выделяется в этом плане. Но гугли тогда что типа такого: «[название твоего сервиса] presigned url» - думаю найдёшь. И да, качать файл на машину сервера с бакета для того чтобы отдать его клиенту - это крайне плохая идея и не важно на сколько хороший код ты там напишешь и будет ли он Laravelway...

https://flysystem.thephpleague.com/v1/docs/adapter/aws-s3-v3/ Изучай, Laravel под капотом использует данную либу

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта