Изображение не может быть загружено на сервер в flutter с помощью DIO

#flutter #dio

#flutter #dio

Вопрос:

Итак, я пытался обновить свой профиль пользователя, используя серверную платформу с именем ASP.NET ядро. Он отлично работает, когда я пытаюсь использовать API в postman, он работает на 100%, Он изменяет весь пользовательский профиль из электронной почты, изображения и т. Д. Но дело в том, что когда я пытаюсь использовать API в flutter, это не работает. Когда я пытаюсь его отладить, я обнаружил, что одна из моих переменных, которая находится в модели, не может перехватить многочастный файл из изображения, и это приводит к ошибке.

Что я пытался решить эту проблему (но все еще не работает):

  1. Я изменил разрешение
  2. Я изменил ширину и высоту изображения

ПОЧТАЛЬОН работает

https://i.stack.imgur.com/lj1af.png

UserProfileServices.dart

 Future<Response> updateProfile(
  File profilePic,
  String email,
  String password,
  String fullName,
  String phoneNumber,
  DateTime dateOfBirth,
  String gender,
  String address,
  String city,
  String province,
  String postalcode

)async{
  final _path="/user/update-user";


  try{
FormData formData= FormData.fromMap(({
   
      "Image": await MultipartFile.fromFile(profilePic.path,
            filename: profilePic.path.split("/").last),
     "Email":email,
      "Password":password,
      "FullName":fullName,
      "DateOfBirth":dateOfBirth,
      "Gender":gender,
      "Address":address,
      "City":city,
      "province":province,
      "postalcode":postalcode,

    }));
      Response response = await httpClient.put(_path,data:formData);
    return response;
  }
    catch(e)
    {
      print(e);
      return e.response;
    }
}
  

При отладке переменная profilepic успешно получала путь к изображению, но изображение не может его перехватить

https://i.stack.imgur.com/a5AU7.png

Ответ №1:

Установите и импортируйте mime и dio и http (на всякий случай)

 import 'package:dio/dio.dart';
import 'package:mime/mime.dart';
import 'package:http_parser/http_parser.dart';
  

Код

 Future<Response> updateProfile(File profilePic,String email,String password,String fullName,String phoneNumber,DateTime dateOfBirth,String gender,String address,String city,String province,String postalcode)async{

  final _path="/user/update-user";

 try{
    Dio dio = new Dio();
   final mimeTypeData =lookupMimeType(profilePic.path, headerBytes: [0xFF, 0xD8]).split('/');
     FormData formData= FormData.fromMap(({
     "Image": await MultipartFile.fromFile(profilePic.path,contentType: MediaType(mimeTypeData[0], mimeTypeData[1]),
     "Email":email,
      "Password":password,
      "FullName":fullName,
      "DateOfBirth":dateOfBirth,
      "Gender":gender,
      "Address":address,
      "City":city,
      "province":province,
      "postalcode":postalcode,

    }));
     var response = await dio.post("enter your full url for api here",data: formData);
    return response;
  }
    catch(e)
    {
      print(e);
      return e.response;
    }
}
  

Примечание: Проверьте, чтобы FormData имел все значения

Если вы не хотите использовать Dio, вы можете использовать многочастный метод без dio, вы можете перейти по следующей ссылке

flutter-image_upload

Ответ №2:

Мои плохие парни, в моей службе профилей отсутствует ключ, который является ключом «phonenumber», что приводит к ошибке