не удается сохранить файл с помощью storeAs в laravel

#laravel #file-upload

#laravel #загрузка файла

Вопрос:

введите описание изображения здесь
введите описание изображения здесь

я использую сайт laravel, и в моем файле у меня есть каталог в path /var/www/site/admin.site.com/public/storage/ salescall мне нужно загрузить файл в эту папку salescall, я использовал следующий код.

      $filenameWithExt = $request->file('sales_call')->getClientOriginalName();
     $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
     $extension = $request->file('sales_call')->getClientOriginalExtension();
     $filenameToStore = $filename . '-' . time() . '.' . $extension;

     $request->file('sales_call')
    ->storeAs('', $filenameToStore, 'sales');
  

и мой filesystems.php заключается в следующем

‘диски’ => [

     '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'),
    ],
    'sales' => [
        'driver' => 'local',
        'root' => public_path('salescall'),
        'visibility' => 'public',
    ],
],
  

файл не загружен в папку. пожалуйста, помогите мне решить эту проблему. Заранее благодарю вас.

Ответ №1:

Вы можете легко это сделать:

 $request->file('sales_call')-> storeAs('salescall/',$filenameToStore);
  

ДЛЯ ЛУЧШЕГО ПОНИМАНИЯ СМ. НИЖЕ

Конфигурация вашей файловой системы кажется неверной. Используйте приведенный ниже пример в качестве руководства, и я надеюсь, что он вам поможет.

Если вы используете этот код, он загрузит ваш файл в папку storage / app

Storage::disk('local')->put('file.txt', 'Contents');

Теперь, если вам нужно изменить каталог и сохранить его непосредственно в папке хранения, вам нужно что-то изменить в filesystems.php досье.

Перейдите к config/filesystems.php файл и измените следующий код-

 'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],
  

Здесь эта строка кода ‘root’ => storage_path (‘app’), отвечающая за определение места хранения. Вы просто настраиваете в соответствии с вашими требованиями.

В качестве альтернативы, в вашем контроллере вы могли бы сделать что-то вроде этого:

 <?php

namespace AppHttpControllersApi;

use AppUser;
use IlluminateHttpRequest;
use AppHttpControllersController;
use IlluminateSupportFacadesStorage;

class UserAvatarController extends Controller
{
    /**
     * Handle the incoming request.
     *
     * @param  IlluminateHttpRequest  $request
     * @return IlluminateHttpResponse
     */
    public function __invoke(Request $request)
    {
        
        $request->validate([
            'avatar'=> ['required','max:200'] 
        ]);

        $user = User::findOrFail(auth()->user()->id);

        // Handle file Upload
        if($request->hasFile('avatar')){

            //Storage::delete('/public/avatars/'.$user->avatar);

            // Get filename with the extension
            $filenameWithExt = $request->file('avatar')->getClientOriginalName();
            //Get just filename
            $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
            // Get just ext
            $extension = $request->file('avatar')->getClientOriginalExtension();
            // Filename to store
            $fileNameToStore = $filename.'_'.time().'.'.$extension;
            // Upload Image
            $path = $request->file('avatar')->storeAs('public/avatars',$fileNameToStore);

       $user->avatar = $fileNameToStore ;

            $user->save(); 
        }

       
       
        
        return $user;
    }
}
  

Но в вашем собственном случае, я считаю:

  1. В вашей конфигурации установите корневой ключ в storage_path(‘salescall’)
  2. Ваш должен быть $path = $request->file(‘sales_call’)->storeAs(‘public / salescall’,$fileNameToStore);

Просто дайте мне знать, если это сработает.. Приветствия!

Комментарии:

1. я переключился на ‘local’ => на ‘root’ => storage_path(‘salescall’) и использовал $request->file(‘sale_call’)-> storeAs(‘public / salescall’,$fileNameToStore); но в папку ничего не загружается

2. Является ли имя файла в теле запроса sales_call?

3. Пожалуйста, сделайте скриншот необходимых файлов.

4. да, имя файла — sales_call . я также приложил скриншоты

Ответ №2:

Вы должны использовать так

 'public' => [
    'driver' => 'local',
    'root' => storage_path('app/public'),
    'url' => env('APP_URL').'/storage',
    'visibility' => 'public',
    'permissions' => [
        'file' => [
            'public' => 0664,
            'private' => 0600,
        ],
        'dir' => [
            'public' => 0775,
            'private' => 0700,
        ],
    ],
],

$request->file('sales_call')-> storeAs('salescall/',$filenameToStore);
  

Комментарии:

1. я переключился на ‘local’ => на ‘root’ => storage_path(‘salescall’) и использовал $request->file(‘sale_call’)-> storeAs(‘salescall /’, $ filenameToStore); но ничего не загружается в папку

2. @user2830078 Я обновил свой ответ. Пожалуйста, проверьте еще раз