【问题标题】:Flutter: upload Image error via API functionFlutter:通过API函数上传图像错误
【发布时间】:2021-03-18 16:25:49
【问题描述】:

我正在尝试通过我的应用程序中的 API 上传图像和一些数据,我的控制台中没有错误,我不知道我的功能有什么问题。 这是我使用的代码:

upload(File imageFile) async {
    var user =
        Provider.of<LoginUserProvider>(context, listen: false).userData.data;
    DateFormat formater = DateFormat('yyyy-MM-dd');
    String formatted = formater.format(dateTime);
    var stream =
        // ignore: deprecated_member_use
        new http.ByteStream(DelegatingStream.typed(imageFile.openRead()));
    var length = await imageFile.length();

    var headers =
        Provider.of<LoginUserProvider>(context, listen: false).httpHeader;

    var uri = Uri.parse(
        "xyz");

    var request = new http.MultipartRequest("POST", uri);
    request.headers.addAll(headers);
    //request.headers.addAll(Environment.requestHeaderMedia);
    var multipartFile = new http.MultipartFile(
      'attachment',
      stream,
      length,
      filename: imageFile.path,
      contentType: MediaType('application', 'x-tar'),
    );
    request.fields['section_id'] = VillaID.toString();
    request.fields['date'] = formatted;
    request.fields['description'] = descriptionController.text;

    request.files.add(multipartFile);
    var response = await request.send();
    print(response.statusCode);
    response.stream.transform(utf8.decoder).listen((value) {
      print(value);
    });

    try {
      final streamedResponse = await request.send();
      final response = await http.Response.fromStream(streamedResponse);
      print(json.decode(response.body));
      final responseData = json.decode(response.body) as Map<String, dynamic>;

      if (response.statusCode == 200 || response.statusCode == 201) {
        return true;
      }catch (error) {
      print(error);
      return false;
    }
    return true;
  }

那么请任何人帮助我解决我的问题!

【问题讨论】:

  • 去掉try-catch在控制台查看错误
  • 你能告诉我应该删除哪个部分
  • 不要删除代码的任何部分,只删除try{} catch(){},因此try-catch块不会捕获错误。
  • 我删除了它,但我有错误响应和 response.body 没有定义
  • 所提到的错误在控制台中?你能和我们分享一下控制台消息吗

标签: api flutter dart multipartfile


【解决方案1】:

你发送了两次相同的请求

第一

var response = await request.send();

第二

final streamedResponse = await request.send();

在发送相同的请求之前,再次创建它们。

关于您的代码,您无需再次创建响应。在其他地方使用第一个。

【讨论】:

  • 当我这样做时,会出现新错误 {status: 0, message: Un Authenticated} E/flutter (19944): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled异常:NoSuchMethodError:在 null 上调用了方法“[]”。 E/flutter (19944):接收者:null E/flutter (19944):尝试调用:[]("section_id")
  • 请编辑您的问题解释新错误并添加带有格式的控制台消息,不要忘记放置一些与错误相关的代码。
猜你喜欢
  • 2021-10-19
  • 2017-08-07
  • 2021-02-05
  • 2021-05-05
  • 1970-01-01
  • 2015-12-25
  • 2022-06-30
  • 1970-01-01
  • 2023-01-09
相关资源
最近更新 更多