S3 is a package of Amazon Web Services(AWS), where we can store a large number of files. So, basically, it is a storage device.
It has one big advantage. You can configure the permission access of files from your AWS Console.
Configure S3 with Laravel:
<> open the link https://aws.amazon.com/console
<> hover your mouse on My Account- AWS Management Console
<> create your account or if you have an account then log in here
<> move to storage and click on S3
<> click on create a bucket and make a bucket for your project. Here you need to put some values like Bucket Name, Region, etc.
Open your Laravel project. You have a .env file in the root folder. Open it and put the below code in your .env file.
AWS_ACCESS_KEY_ID=your_key_here
AWS_SECRET_ACCESS_KEY=your_secret_here
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=your-bucket-name
*** you get all the credential when you create a Bucket in AWS console
Move to /your-laravel-project/config/filesystems.php and write down the below code
‘s3’ => [
‘driver’ => ‘s3’,
‘key’ => env(‘AWS_ACCESS_KEY_ID’),
‘secret’ => env(‘AWS_SECRET_ACCESS_KEY’),
‘region’ => env(‘AWS_DEFAULT_REGION’),
‘bucket’ => env(‘AWS_BUCKET’),
],
For uploading the file, create a new controller in your laravel project. Please check the below code, here I have commented on the process.
namespace App\Http\Controllers\API; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Validator; use League\Flysystem\AwsS3v3\AwsS3Adapter; // link aws adapter with laravel use Illuminate\Support\Facades\Storage; // link with S3 storage use Illuminate\Contracts\Filesystem\Filesystem;class AwsController extends Controller { public function index(Request $request){ if ($request->hasFile(‘filedoc’)) { $filenamewithextension = $request->all()[‘filedoc’]->getClientOriginalName(); //get filename without extension
$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
//get file extension
$extension = $request->all()[‘filedoc’]->getClientOriginalExtension();
//filename to store
$filenametostore = $filename.’_’.time().’.’.$extension;
//Upload File to s3
Storage::disk(‘s3’)->put($filenametostore, fopen($request->all()[‘filedoc’], ‘r+’), ‘public’);
//echo $url = Storage::disk(‘s3’)->url($request->all()[‘filedoc’]);
echo Storage::disk(‘s3’)->url($filenametostore);
} } |
Hope it will work for you.
Senior Software Engineer at Openweb Solutions