Всем привет. По пути storage/5/sas24s15.png
лежит картинка. Эта картинка принадлежит конкретному пользователю, только он может получить к ней доступ. Мой возможный вариант реализации: в таблице БД хранить путь к файла, символическую ссылку и оригинально название.
Пользователь переходит по пути storage/5/ajs5
, проверяются права и перенаправляет на нужную ссылку. Имя файла - рандомный набор символов длиной от 30 до 250 символов. Но, вижу недочёт, вдруг кто-то поделится абсолютной ссылкой, то другой сможет скачать этот файл без проблем. Да, конечно можно после получения одной ссылки сразу же менять запись в БД.
Как настроить Apache под Laravel ?(перенаправлять на нужный контроллер, который решает отдать файл или нет). Или же использовать мой вариант?
1) Картинки загружать не в public
директорию.
2) Сделать контроллер - который, например, при урле: http://example.com/image/123
берет 123
(тобишь наш id
для поиска по базе) и ищет картину.
3) Если картинка найдена - смотрим кто её запрашивает (по кукам, сессиям или как вы там идентифицируете пользователя) если тот у кого есть права на просмотр, то отображаем картинку, например так:
$file = "<Путь к картинке>";
header("Content-type: image/jpeg");
readfile($file);
exit();
И будет вывод как настоящей картинки. Таким способом вы сохраняете путь к картинке закрытым и перед тем как показать изображение обрабатываете php
скриптом
Вкратце так:
Маршрут -
Route::get('files/{filename}', 'HomeController@getFile');
Контроллер -
class HomeController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function getFile($filename)
{
// проверяем может ли \Auth::user() скачивать файл $filename;
if( ... ) {
return response()->download(storage_path('files/'.$filename), null, [], null);
} else {
abort(403);
}
}
}
Файлы мы храним соответственно в /storage/files
куда публичного доступа нет.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
I can not implement parsing from ftp, and everything works with the folder on the phone
У меня есть строка которая соединяет 2 строки в себя, мне нужно если 1-цифра 0 то удалить ее из строкиКак такое можно сделать?