Laravel: папка загрузки создана в неправильном каталоге

#laravel #vue.js

#laravel #vue.js

Вопрос:

У меня есть форма с вводом файла, готовая к сохранению.

  $request->validate([
            'name'=> 'required|min:3',
            'image'=> 'required|image|mimes:jpeg,png,jpg'
        ]);

        $category = new Category();
        $category->name = $request->name;

        $path = $request->file('image')->store('categories_images');

        $category->image = $path;
 

Приведенный выше код делает то, что он извлекает поле изображения из запроса и сохраняет его в папке categories_images . Когда я впервые загрузил файл для его тестирования, он создал папку в хранилище / приложении.

Моя проблема в том, что я хочу просмотреть изображения на своем сайте:

 //store.state.serverPath returns: http://localhost:8000 -> this is right
<img :src="`${$store.state.serverPath}/storage/${category.image}`" class="image-wd"/>
 
 

Когда я проверяю его в браузере, он говорит:

http://localhost:8000/storage/categories_images/adGR57Gq6lNUqRVvEubRDfxNMZzEhya3A7oESUox.png не найдено

Он ожидает изображения в хранилище / app / public, но создает папку categories_images каждый раз, когда я загружаю изображение в хранилище / приложение. Я что-то здесь упускаю?

Ответ №1:

Кажется, я не могу оставить комментарий просто в качестве ответа. Итак, позвольте мне добавить свой вклад. Вы создали свою символическую ссылку? Если нет, сделайте это сейчас или просто переделайте. У меня была такая же проблема, когда я портировал свой код с mac на Windows. Даже если вся настройка была выполнена точно, ссылка была связана с моим mac. Я только что исправил эту проблему для своего кода. Так что спасибо за ваш вопрос.

    php artisan storage:link
 

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

 $path = isset($validated['document']) ? $path = $request->file('document')->store('pdfs', 'public') : null;
 

Доступ к файлу будет осуществляться по URL-адресу www.example.com/storage/pdfs /$путь

document — это имя входного файла.

Ответ №2:

Вы пропустили ту часть руководства, где он изменил конфигурацию -> filesystems.php с этим

 'local' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
        ],