web-dev-qa-db-fra.com

enregistrer l'image dans un dossier public à la place du stockage laravel 5

je veux enregistrer mon avatar dans le dossier "Public" et le récupérer.

d'accord. je peux l'enregistrer mais dans le dossier "storage/app" au lieu de "public"

mon ami m'a dit d'aller dans "config/filesystem.php" et de le modifier, donc je l'ai fait comme ça

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

toujours pas de changement.

ici mes codes simples

Route:

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

Manette

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"));
}

Vue:

{!! Form::open(['url'=>'saved','method'=>'post','files'=>true]) !!}
                {!! Form::file('image') !!}
                {!! Form::submit('save') !!}
            {!! Form::close() !!}

                <img src="storage/app/{{$patch}}">

Comment puis-je enregistrer mon image (et mon fichier à l'avenir) dans un dossier public au lieu d'un stockage?

8
siros

Dans config/filesystems.php, vous pouvez faire ceci ... changer l'élément racine en public

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

et vous pouvez y accéder par

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

Vous pouvez passer l'option disque à la méthode de \Illuminate\Http\UploadedFile classe:

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

ou vous pouvez créer un nouveau disque de système de fichiers et vous pouvez l'enregistrer sur ce disque.

Vous pouvez créer un nouveau disque de stockage dans config/filesystems.php:

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

dans le contrôleur:

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

Vous devrez lier votre répertoire de stockage à votre dossier public avec:

php artisan storage:link

Une fois que vous avez fait cela, pour l'afficher dans la vue, vous pouvez faire:

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

Ou dans votre cas:

<img src="{{ asset('storage/app/' . $patch) }}">
2
Samsquanch