2

这是我带有标头auth令牌的邮递员请求。

**这是我的邮递员类型,带有标头 <code>auth</code> 和令牌**

我正在尝试上传图片,一切都按照 dio docs 中的说明进行设置,并且与 postman 参数完全相同,但抛出 500 错误,在这里找不到任何错误。在这里被困了3个小时。

请在这里找到任何错误我被困在这里谢谢!(ps:postaman 文件只需要图像文件,即 jpg、png 其他文件不包括图像也会抛出与应用程序抛出的 500 错误相同的错误)

我的 dio 要求是:

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);

这是我的错误:

在此处输入图像描述

4

1 回答 1

2

由于最新更新,content-type不被Dio视为“正常”标题。我的意思是它忽略了那个标题。

要使其工作,请dio.options.contentType改为设置属性。

把它包起来,而不是这样:

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

尝试这个:

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

奖金

创建Dio实例时,您可以将 a 传递BaseOptions给它的构造函数,如下所示:

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

我相信这是一种更清洁的做事方式:D

于 2020-02-03T13:28:38.207 回答