File Upload Process in Laravel Framework

21-01-2019

We can easly integrate file upload process in Laravel as follows:

1. Add following codes to create.blade.php file:

<div class="box box-primary">
    <div class="box-body">
        <div class="row">
            {!! Form::open(['route' => 'applications.store','files'=>true]) !!}
            <div class="form-group col-sm-6">
                {!! Form::label('image', 'Image:') !!}
                @if(isset($application->image))
                <img src="{{asset("$application-/>image")}}" width="125" height="125"/>
                <input type="hidden" name="image-old" value="{{$application->image}}">
                    @endif
                    <div class="form-control">
                        {!! Form::file('image') !!}
                    </div>
                    {!! Form::close() !!}
                </div>
            </div>
        </div>
    </div>

2. Add following codes to edit.blade.php file:

<div class="box box-primary">
    <div class="box-body">
        <div class="row">
            {!! Form::model($application,
            ['route' => ['applications.update', $application->id], 'method' => 'patch','files'=>true]) !!}

            <div class="form-group col-sm-6">
                {!! Form::label('image', 'Image:') !!}
                @if(isset($application->image))
                <img src="{{asset("$application->image")}}" width="125" height="125"/>
                    <input type="hidden" name="image-old" value="{{$application->image}}">
                        @endif
                        <div class="form-control">
                            {!! Form::file('image') !!}
                        </div>
                    </div>
                    {!! Form::close() !!}
                </div>
            </div>
        </div>

3. In Controller class:

public function store(CreateApplicationRequest $request)
{
    $fileUtil = new FileUtil();
    $filePath = $fileUtil->saveSingleFile($request, "image");
    $input = $request->all();
    $input["image"] = $filePath;
    $application = $this->applicationRepository->create($input);
    alert()->success('Application saved successfully.');
    return redirect(route('applications.index'));
}

public function update($id, UpdateApplicationRequest $request)
{
    $application = $this->applicationRepository->findWithoutFail($id);
    
    if (empty($application)) {
        Flash::error('Application not found');
        
        return redirect(route('applications.index'));
    }
    $fileUtil = new FileUtil();
    $filePath = $fileUtil->saveSingleFile($request, "image");
    
    if ($filePath == null) $filePath = $request->input("image-old");
    $input = $request->all();
    $input["image"] = $filePath;
   
    $application = $this->applicationRepository->update($input, $id);
    alert()->success('Application updated successfully.');
    
    return redirect()->route('applications.edit', $application->id);
}

FileUtil class:

use Illuminate\Http\Request;

class FileUtil
{
    /**
    * @param Request $request
    * @param string $inputName
    * @return string saved file path
    */
    public static function saveSingleFile(Request $request, $inputName = "file")
    {
        $file = $request->file($inputName);
        if ($file != null) {
            $fileName = Storage::disk("uploads")->put("", $file);
            if ($request->secure()){
                $filePath = "https://" . $request->getHost() . "/uploads/" . $fileName;
            }
            else{
                $filePath = "http://" . $request->getHost() . "/uploads/" . $fileName;
            }
            return $filePath;
        } else {
            return null;
        }
        
    }
}

config/filesystem.php file for Storage:

    'disks' => [

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

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'visibility' => 'public',
        ],
        'uploads' => [
            'driver' => 'local',
            'root' => public_path().'/uploads' ,
            'visibility' => 'public',
        ],

        's3' => [
            'driver' => 's3',
            'key' => 'your-key',
            'secret' => 'your-secret',
            'region' => 'your-region',
            'bucket' => 'your-bucket',
        ],

    ],

© 2019 All rights reserved. Codesenior.COM