aGreenCoder's avatar

Store Image in s3 using Intervention Image package in to Laravel 8

I successfully install the Intervention Image , I test it, it worked fine, but when I try to upload in s3 then it through an error which is Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException

Here is my controller code

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Data;
use Storage;
use Image;

class DataController extends Controller
{
    public function adddata(Request $request){

        $value = $request->validate([
            'name' => ['required'],
            'email' => ['required']
        ]);
        if ($request->image) {
            $image = Image::make($request->file('image')->getRealPath())->resize(400,400)->encode('jpg');
            $value['image'] = Storage::disk('s3')->putFile('myfolder', (string)$image);
        }
        
        if ($request->video) {
            $value['video'] = Storage::disk('s3')->putFile('myfolder', $request->video);
        }
        Data::create($value);
    }
}

Here is my Blade code

<form action="{{ route('data.add') }}" method="POST" enctype="multipart/form-data">
   @csrf
   <div class="container">
      <div class="row">
         <div class="col-12 mb-3">
            <input type="text" name="name" id="" placeholder="name">
         </div>
         <div class="col-12 mb-3">
            <input type="email" name="email" id="" placeholder="email">
         </div>
         <div class="col-12 mb-3">
            <input type="file" name="image" id="">
         </div>
         <div class="col-12 mb-3">
            <input type="file" name="video" id="">
         </div>
         <div class="col-3">
            <input type="submit" name="submit" id="">
         </div>
      </div>
   </div>
</form>

Model Code

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Storage;
class Data extends Model
{
    use HasFactory;
    protected $fillable=[
        'name',
        'email',
        'image',
        'video'
    ];
}

I want to mention that, I found the piece of code from https://laracasts.com/discuss/channels/laravel/laravel-intervention-image-upload-to-amazon-s3 And I try both methods but not works for me.

0 likes
1 reply
mhreja's avatar
mhreja
Best Answer
Level 1

Change code inside adddata function in your controller with the below code, Hope it will help you.

    $value = $request->validate([
        'name' => ['required'],
        'email' => ['required']
    ]);
    if ($request->image) {
        $image = Image::make($request->file('image'))->resize(400,400);
        $value['image'] = Storage::disk('s3')->put('myfolder/filename.png',  $image->stream());
    }
    
    if ($request->video) {
        $value['video'] = Storage::disk('s3')->putFile('myfolder', $request->video);
    }
    Data::create($value);

Please or to participate in this conversation.