save image in public folder instead storage laravel 5

88,641

Solution 1

In config/filesystems.php, you could do this... change the root element in public

'disks' => [
   'public' => [
       'driver' => 'local',
       'root'   => public_path() . '/uploads',
       'url' => env('APP_URL').'/public',
       'visibility' => 'public',
    ]
]

and you can access it by

Storage::disk('public')->put('filename', $file_content);

Solution 2

You can pass disk option to method of \Illuminate\Http\UploadedFile class:

$file = request()->file('image');
$file->store('toPath', ['disk' => 'public']);

or you can create new Filesystem disk and you can save it to that disk.

You can create a new storage disc in config/filesystems.php:

'my_files' => [
    'driver' => 'local',
    'root'   => public_path() . '/myfiles',
],

in controller:

$file = request()->file('image');
$file->store('toPath', ['disk' => 'my_files']);

Solution 3

You'll need to link your storage directory to your public folder with:

php artisan storage:link

Once you've done that, to display it in the view you can do:

{{ asset('storage/file.txt') }}

Or in your case:

<img src="{{ asset('storage/app/' . $patch) }}">
Share:
88,641
Siros Fakhri
Author by

Siros Fakhri

Updated on September 04, 2020

Comments

  • Siros Fakhri
    Siros Fakhri over 3 years

    i wanna save my avatar at "Public" folder and ther retrieve.

    ok. i can save it but in "storage/app" folder instead "public"

    my friend told me go to "config/filesystem.php" and edit it ,so i did it like this

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

    still no change.

    here my simple codes

    Route :

    Route::get('pic',function (){
    return view('pic.pic');
    });
    Route::post('saved','test2Controller@save');
    

    Controller

    public function save(Request $request)
    {
            $file = $request->file('image');
            //save format
            $format = $request->image->extension();
            //save full adress of image
            $patch = $request->image->store('images');
    
            $name = $file->getClientOriginalName();
    
            //save on table
            DB::table('pictbl')->insert([
                'orginal_name'=>$name,
                'format'=>$base,
                'patch'=>$patch
            ]);
    
            return response()
                   ->view('pic.pic',compact("patch"));
    }
    

    View:

    {!! Form::open(['url'=>'saved','method'=>'post','files'=>true]) !!}
                    {!! Form::file('image') !!}
                    {!! Form::submit('save') !!}
                {!! Form::close() !!}
    
                    <img src="storage/app/{{$patch}}">
    

    How Can save my image (and file in future) at public folder instead storage?