как получить доступ к загруженному файлу из веб-браузера в laravel?

Это то, что я сделал, чтобы загрузить свой файл в проект laravel.

if($request->file()) {
     $fileName = time().'_'.$request->file('imageFile')->getClientOriginalName();
     $filePath = $request->file('imageFile')->storeAs('products', $fileName, 'public');
     $product->featured_image = '/storage/' . $filePath;
 }

общедоступный диск

'public' => [
      'driver' => 'local',
      'root' => storage_path('app/public'),
      'url' => env('APP_URL').'/storage',
      'visibility' => 'public',
 ],

Файл загружен в папку хранилища внутри app/public/products, но когда я пытаюсь получить свой файл, отображается ошибка 404. Даже я создал символическую ссылку на общую папку, но она не работает. я не знаю, почему, но файлы не отображаются в общей папке. файлы загружаются только на уровне проекта или в личную папку внутри папки хранилища. как я могу получить доступ к файлу через веб-браузер.


person Maninder Singh    schedule 03.06.2021    source источник


Ответы (2)


Сначала вы создали символическую ссылку

php aritsan storage:link

это создаст папку для хранения ярлыков в общей папке

так что вы можете получить доступ к URL

asset('storage/products/filename')

в вашем случае вам нужно изменить путь при сохранении

  $product->featured_image =  $fileName;

поэтому при доступе

 asset('storage/products/'.$product->featured_image )

ссылка: https://laravel.com/docs/8.x/filesystem#the-public-disk

person John Lobo    schedule 03.06.2021
comment
Я сделал то же самое, что вы упомянули с самого начала, но не работает в папке хранения общих папок, созданной после создания символической ссылки, но файлы не загружаются в общую папку. все файлы загружаются в папку хранения проекта. который недоступен через веб-браузер, насколько я знаю - person Maninder Singh; 03.06.2021
comment
да, файлы загружаются в папку для хранения, и они автоматически связываются с общедоступной папкой. покажите код, как вы отображаете - person John Lobo; 03.06.2021
comment
$filePath = $request-›file('imageFile')-›move(public_path('storage/products'), $fileName); Я просто переместил файл в общедоступный каталог, правильно ли я поступил? теперь я могу видеть это из веб-браузера - person Maninder Singh; 03.06.2021
comment
как вы показываете изображение - person John Lobo; 03.06.2021
comment
держите свой код таким же, как в ответе. это правильно. не меняйте - person John Lobo; 03.06.2021
comment
я использую vuejs на интерфейсе - person Maninder Singh; 03.06.2021
comment
хорошо. как ты возвращаешься в ларавле - person John Lobo; 03.06.2021
comment
файл изображения : this.product ? this.product.featured_image : ноль, - person Maninder Singh; 03.06.2021
comment
:style={ 'фоновое изображение': url(${imageFile}) } - person Maninder Singh; 03.06.2021
comment
product.featured_image получает только имя изображения, поэтому оно должно выглядеть как urdomain.com/storage/products/+product .featured_image - person John Lobo; 03.06.2021
comment
нет, сейчас работает, я просто загружаю файлы прямо в общую папку - person Maninder Singh; 03.06.2021

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

php artisan storage:link

https://laravel.com/docs/8.x/filesystem

person Bennett    schedule 03.06.2021