1

I am using "public" fiilesystem driver and I store files at:

PROJECT_ROOT/storage/app/public/message_files

But I can also access them from here (since I've created a symlink):

PROJECT_ROOT/public/storage/message_files

Then I try to get a link to the file using asset() helper and it receives a path like this one:

message_files/gwYRplTEyX9O3Z1sOYXxk2C3ZfLVSiIZF93nZbjz.txt

and returns:

http://localhost/message_files/gwYRplTEyX9O3Z1sOYXxk2C3ZfLVSiIZF93nZbjz.txt

As you can see, there's no "storage" directory in the URL, so the link is incorrect. My question is: can we set any settings so that the "storage" directory isn't omitted?

Here is my filesystems.config:

<?php return [ /* |-------------------------------------------------------------------------- | Default Filesystem Disk |-------------------------------------------------------------------------- | | Here you may specify the default filesystem disk that should be used | by the framework. The "local" disk, as well as a variety of cloud | based disks are available to your application. Just store away! | */ 'default' => env('FILESYSTEM_DRIVER', 'public'), /* |-------------------------------------------------------------------------- | Default Cloud Filesystem Disk |-------------------------------------------------------------------------- | | Many applications store files both locally and in the cloud. For this | reason, you may specify a default "cloud" driver here. This driver | will be bound as the Cloud disk implementation in the container. | */ 'cloud' => env('FILESYSTEM_CLOUD', 's3'), /* |-------------------------------------------------------------------------- | Filesystem Disks |-------------------------------------------------------------------------- | | Here you may configure as many filesystem "disks" as you wish, and you | may even configure multiple disks of the same driver. Defaults have | been setup for each driver as an example of the required options. | | Supported Drivers: "local", "ftp", "s3", "rackspace" | */ 'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], 's3' => [ 'driver' => 's3', 'key' => env('AWS_KEY'), 'secret' => env('AWS_SECRET'), 'region' => env('AWS_REGION'), 'bucket' => env('AWS_BUCKET'), ], ], ]; 

Thanks in advance!

2 Answers 2

3

It's normal that asset() points to the public root, and changing this would probably have side effects.

You may be looking for Storage::url().

Sign up to request clarification or add additional context in comments.

Comments

0

if you want to access your storage with asset. you have to run the command

php artisan storage:link then you can add storage in asset like asset(storage/your/path)

I hope this helps

3 Comments

I've already created a link, but the thing is I don't want to manually add "storage" to every single path used by asset() helper, I want to add it globally for all links if you know what I mean.
@you need to append app in your path
Can you show me an example? I am not really sure I know what you mean.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.