Загрузка изображения с помощью метода post в Flutter

#flutter #flutter-provider #flutter-image

Вопрос:

Я должен загрузить изображение из галереи на сервер с помощью поставщика в Flutter.

Вот средство выбора файлов

   _loadPicker(ImageSource source) async {
   File picked = await ImagePicker.pickImage(source: ImageSource.gallery);
   print(picked);
   if (picked != null) {
   final response = await Provider.of<ProfilePictureUpdate>(context, listen: 
    false).profilePicUpdate(picked);
    if (response["status"] ) {
      Fluttertoast.showToast(msg: response["title"]);
     }
      else {
     Fluttertoast.showToast(msg: response["title"]);
      }
     }
    }
 

И вот метод post

  Future<Map<String, dynamic>> profilePicUpdate(picked) async {
 try {
   final response = await ApiRequest.send(route: "profile/update/picture", method: "POST", 
   body: {
    "  photo_url" : picked,
    });
  if (response.statusCode == 200 ) {
    return {
      "status": true,
      "title" : response["title"]
    };
  }
  }
 

Ответ №1:

Если вы хотите отправить изображение, вам нужно использовать FormData( составную часть) в аналогичной сети » Dio » (enctype). В http вы также можете использовать составные части.

Необходимо помнить, что вы используете изображение всегда не одно и то же, здесь используйте это поле, когда имя параметров на стороне сервера совпадает.

  class ImageRepository {
  Future<dynamic> uploadImage(filepath) async {
  FormData formData = FormData.fromMap({
    "image": await MultipartFile.fromFile(filepath,
      filename: filepath.split('/').last)
   });
   var response = await Dio().post(
    url,
    data: formData),
  );
  print(response.data);
    if (response.statusCode == 200) {
    return 'Image Upload';
  } else {
    throw Exception 'Problem occour';
  }
  }