I have a flutter form which contains both textual data and an image. I am using http package to send post request to the Laravel backend that has a route in api.php like:
Route::post('/locations', 'LocationController@store');
So at first since I have never tried to upload an image to laravel I had to disable my image input just to check if things were working and and I was successfully able to send a post request from my frontend with a status code of 201 Created
with the record successfully created in the database. So I have added the first two lines below in my controller to save the image which are causing my requests to fail with 500 | server error.
(The rest lines were already available and working with previous requests):
public function store(Request $request)
{
$locationName = $request["name"];
$data = base64_decode($request["image"]); // Image sent from flutter like: _image != null ? base64Encode(_image.readAsBytesSync()) : ''
Storage::disk('public_images')->put("${$locationName}.jpg", $data); // public_images is defined below
return location::create([
'name' => $request["name"],
'time' => $request["time"],
'package' => $request["package"],
'summary' => $request["summary"],
'info' => $request["info"],
'image' => $request["image"]
]);
}
I have defined the public_images
disk(in config/filesystems.php) as follows: (I have to save in the public directory because my server doesn't work with symlinks, but that isn't my problem):
'public_images' => [
'driver' => 'local',
'root' => public_path() . '/images',
],
Now What I want is to save the image to the disk and get the path to store it to the database table so that when accessing from flutter I will only use the api url along with that path to display the image as a network resource. So what is the right way to upload a file from flutter app to laravel backend? Or am I doing it all wrong?
Also: since I am new to file uploads in laravel from flutter, what generally are the best practices in uploading files to a laravel server? Thanks in advance!