Nasıl başladığınızı tam bilmediğim için sırayla gidiyorum.
Öncelikle storage dizinine symlink oluşturuyoruz:
php artisan storage:link
config/filesystems.php dosyası Storage ayarlarını tutuyor. Eğer oraya bakarsanız:
'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_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
],
],
Siz yükleme yapmak için local diski seçmişsiniz ama ayarlarda local dizininin tanımlamasına bakarsanız storage/app klasörünü gösteriyor ki bu klasör dışarıya kapalı bir klasör. Yani buraya yükleyeceğiniz dosyalara uygulamanızda direkt link veremezsiniz.
Hemen altında ise kullanmanız gereken public diski var. O diskin gösterdiği yok ise storage/app/public klasörü. Bu klasör de doğal olarak dışarıya kapalı fakat üstte symlink oluşturduğumuz için ulaşılabilir hale gelmiş oluyor. Siz isterseniz buraya kendiniz de bir disk oluşturabilirsiniz.
Dosya yüklemeye çalışırken gelen dosyayı $request->file('product_image')
ile almanız gerekiyor. Request::get() sadece $_GET ve $_POST dizisine bakar; $_FILES dizisine bakmaz.
Bu durumda:
$path = $request->product_image->store('upload', 'public');
Product::create([
// ...
'product_image' => $path
]);
yapabilirsiniz.
Dokümanları okumamışsınız:
https://laravel.com/docs/6.0/requests#files
https://laravel.com/docs/6.0/filesystem#storing-files