Your using storage_path() helper in your root. This literally uses /storage + whatever you have inside the ().
What you would want is public_path instead of storage_path. However I don't recommend doing it that way. Instead follow the doc's suggested method.
Upload to the storage path, and then symlink your storage folder to public.
The public disk is intended for files that are going to be publicly accessible. By default, the public disk uses the local driver and stores these files in storage/app/public. To make them accessible from the web, you should create a symbolic link from public/storage to storage/app/public. This convention will keep your publicly accessible files in one directory that can be easily shared across deployments when using zero down-time deployment systems like Envoyer.
Check this out on how to symlink storage to public and how to use the asset() helper https://laravel.com/docs/5.8/filesystem#the-public-disk