#php #laravel #flutter #dart #dio
#php #laravel #flutter #dart #dio
Вопрос:
Я не могу загрузить изображение на свой сервер Laravel с Flutter с помощью Dio и ImagePicker, когда запрос в Postman возвращает успешный ответ
Почтальон:
postman_screenshot
Laravel:
public function uploadFile(Request $request) {
if($request->hasFile('image')) {
$name = time()."_".$request->file('image')->getClientOriginalName();
$request->file('image')->move(public_path('images'), $name);
}
return response()->json([
asset("images/$name"),
201,
'message' => asset("images/$name") ? 'Image saved' : 'Image failed to save'
]);
}
Flutter:
Future getImage(context) async {
var image = await picker.getImage(
source: ImageSource.gallery,
imageQuality: 50,
maxHeight: 500.0,
maxWidth: 500.0);
imageFile = File(image.path);
_uploadFile(imageFile);
}
_uploadFile(File file) async {
String name = file.path.split('/').last;
var data = FormData.fromMap({
"name": await MultipartFile.fromFile(
file.path,
filename: name,
),
});
Dio dio = new Dio();
await dio
.post("http://localhost:8000/api/upload-file", data: data)
.then((response) => print(response))
.catchError((error) => print(error));
}
Ошибка на стороне сервера: Http status error [500] Undefined variable *name* in file ...
Ответ №1:
Не могли бы вы повторить попытку после изменения приведенного ниже кода?
var data = FormData.fromMap({
"image": await MultipartFile.fromFile(
file.path,
filename: name,
),
});
Комментарии:
1. Спасибо @kuku, я понял это после. Использовалось имя вместо изображения
Ответ №2:
Пожалуйста, попробуйте это, у меня это работает:
List<MultipartFile> multiFiles = [];
for(int i = 0; i < files.length; i ) {
multiFiles.add(await MultipartFile.fromPath('profile_photo[]', files[i].path));
}
request.files.addAll(multiFiles);