Shouldn't this be passing the $file instead of $request :
$newUser->uploadThumbAndMainImage($request,$userId);
I am trying to upload multiple images over my laravel rest api.
I am injecting a form validation to my controller that has the rule: 'images' => 'required|array|min:1|max:5'
If it passes it will go into the controller where I have this:
$files = $request->file('images');
foreach ($files as $file) {
// Validate each file
$rules = ['images' => 'image|mimes:jpg,jpeg,bmp,png,gif|max:9000'];
$validator = Validator::make(['file'=> $file], $rules);
if ($validator->fails()) {
return response()->json(['errors' => $validator->messages()->all()],400);
}
$newUser->uploadThumbAndMainImage($request,$userId);
}
And finally the model function
public function uploadThumbAndMainImage($request,$userId)
{
// get basic info
$s3 = Storage::disk('s3');
$file = $request->file('images');
$extension = $request->file('images')->guessExtension();
$filename = uniqid() . '.' . $extension;
$mimeType = $request->file('images')->getClientMimeType();
$fileSize = $request->file('images')->getClientSize();
$image = Image::make($file);
// generate the thumb and medium image
$imageThumb = Image::make($file)->fit(320)->crop(320, 240, 0, 0);
$imageThumb->encode($extension);
$imageMedium = Image::make($file)->resize(800, null, function ($constraint) {
$constraint->aspectRatio();
});
$imageMedium->encode($extension);
$image->encode($extension);
// upload image to S3
$s3->put("images/{$userId}/main/" . $filename, (string) $image, 'public');
$s3->put("images/{$userId}/medium/" . $filename, (string) $imageMedium, 'public');
$s3->put("images/{$userId}/thumb/" . $filename, (string) $imageThumb, 'public');
}
But I get the error: Fatal error: Call to a member function guessExtension() on array
And yeah I post my images as "images[]" since I am allowing to upload multiple files at once.
Shouldn't this be passing the $file instead of $request :
$newUser->uploadThumbAndMainImage($request,$userId);
Please or to participate in this conversation.