Flutter диодная загрузка изображения не работает, выдает ошибку сервера 500, но работает в почтальоне - PullRequest
0 голосов
/ 03 февраля 2020

Это мой запрос почтальона с заголовком auth токен.

imageauth with token**">

Я пытаюсь загрузить изображение, все настроено, как указано в Dio Docs и точно так же, как параметр почтальона, но выдается 500 ошибок, не смог найти здесь никакой ошибки. застрял здесь, как на 3 часа.

пожалуйста, найдите здесь ошибку, я застрял здесь, спасибо! (ps: файл постамана принимает только файл изображения, т.е. jpg, другой файл png, исключая изображения, также выдает то же, что и ошибка 500, как выдает приложение)

и мой запрос на дио:

Future requestChangePhoto(
      String wardenToken, String wardenId, File imageFile) async {
    String fileName = imageFile.path.split('/').last;

    print(fileName);
    print(getWardenPhotoChange);

    FormData data = FormData.fromMap({
      "wardenId": "${wardenId.trim()}",
      "photo": await MultipartFile.fromFile(imageFile.path,
          filename: fileName, contentType: MediaType("image", "jpg")),
    });

    Dio dio = new Dio();

    dio.options.headers['content-Type'] = 'application/json';
    dio.options.headers["authorization"] = "$wardenToken";

    await dio
        .post("$getWardenPhotoChange", data: data)
        .then((response) => print(response.data));
  }

Это мой ImagePicker и запрос:

 var imageFile = await ImagePicker.pickImage(source: imageType == ImageType.camera? ImageSource.camera: ImageSource.gallery,

    imageQuality: 50, maxHeight: 500, maxWidth: 500

    );
        print(imageFile);

        NetworkHandler networkHandler = NetworkHandler();
        networkHandler.requestChangePhoto(xybaData.WardenToken, xybaData.wardernId, imageFile);

Это моя ошибка:

enter image description here

1 Ответ

0 голосов
/ 03 февраля 2020

С момента последних обновлений content-type не обрабатывается Dio как "нормальный" заголовок. Я имею в виду, что он игнорирует этот заголовок.

Чтобы заставить его работать, установите вместо него свойство dio.options.contentType.

Обернув его вместо этого:

 dio.options.headers['content-Type'] = 'application/json';

попробуйте это:

 dio.options.contentType = 'application/json';

Bonus :

При создании экземпляра Dio вы можете передать BaseOptions его конструктору следующим образом:

Dio dio = Dio(
    BaseOptions(
        headers: {"authorization": wardenToken},
        contentType = "application/json",
    )
);

Я считаю, что это более чистый способ ведения дел: D

...