Как сопоставить частный ресурс с общедоступным в Laravel?

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

Например, вот фрагмент кода, который я использую для сохранения загрузки фотографии.

 if (Storage::disk('public')->has($usersname)) {
            Storage::delete($usersname. '.' . $ext);
        }
        Storage::disk('public')->put($filename, File::get($file));

Но в представлении я не могу напрямую отображать этот теперь сохраненный ресурс


person Joe W    schedule 26.05.2016    source источник


Ответы (2)


Вы можете использовать два разных подхода:

  • #1: определите новый диск для вашего хранилища, связанный с каталогом внутри папки public. Что-то вроде public/profile_pics. Все, что вам нужно сделать, это использовать этот диск при загрузке изображений профиля. Таким образом, они будут доступны в любом месте;
  • #2: если вы не хотите открывать свои файлы напрямую, определите частный диск для фотографий вашего профиля, а затем создайте маршрут (возможно, /profile-pic/{userId}), который будет обслуживать определенный ответ с данными изображения. и правильные заголовки;

РЕДАКТИРОВАТЬ: Laravel использует Flysystem для хранения. Итак, если вы загляните на страницу API проекта, вы сможете найти

$mimetype = $filesystem->getMimetype('path/to/file.txt');

пример, который может помочь вам получить правильный MIME-тип для ответа, который вы собираетесь построить (в случае, если вы реализуете № 2).

Надеюсь, поможет :)

person Francesco Malatesta    schedule 26.05.2016
comment
Спасибо было очень полезно - person Joe W; 26.05.2016

Публичный диск предназначен для файлов, которые будут общедоступны. По умолчанию общедоступный диск использует локальный драйвер и хранит эти файлы в хранилище/приложении/общедоступном. Чтобы сделать их доступными из Интернета, вы должны создать символическую ссылку из общедоступного/хранилища в хранилище/приложение/общедоступное.

Документация Laravel — Файловая система — Конфигурация

Если вы сделаете это, у вас будет общедоступная папка, которую вы можете использовать и указывать свои URL-адреса на эти файлы. (www.вашсайт.com/storage/...)

person lagbox    schedule 26.05.2016