У меня есть форма флаттера, которая содержит текстовые данные и изображение. Я использую пакет http для отправки пост-запроса на Laravel сервер, у которого есть маршрут в API. php вроде:
Route::post('/locations', 'LocationController@store');
Сначала, так как я никогда не пробовал чтобы загрузить изображение в laravel Мне пришлось отключить ввод изображения, чтобы проверить, все ли работает, и я смог успешно отправить запрос с моего внешнего интерфейса с кодом состояния 201 Created
с успешно созданной записью в база данных. Поэтому я добавил первые две строки ниже в моем контроллере, чтобы сохранить изображение, из-за которого мои запросы не выполняются с 500 | server error.
(остальные строки уже были доступны и работают с предыдущими запросами):
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"]
]);
}
Я определил диск public_images
(в config / filesystems. php) следующим образом: (Я должен сохранить в каталоге publi c, потому что мой сервер не работает с символическими ссылками, но это не моя проблема ):
'public_images' => [
'driver' => 'local',
'root' => public_path() . '/images',
],
Теперь я хочу сохранить изображение на диск и получить путь для его сохранения в таблице базы данных, чтобы при доступе из флаттера я использовал только api url вместе с этим путь для отображения изображения в качестве сетевого ресурса. Итак, как правильно загрузить файл из приложения флаттера в laravel бэкэнд? Или я все делаю не так?
Кроме того: поскольку я новичок в загрузке файлов в laravel с флаттера, каковы наиболее эффективные методы загрузки файлов на сервер laravel? Заранее спасибо!