0

我是 Flutter 的新手,在将文件上传到 API 时遇到问题。我曾尝试使用 FormData 和 MultiPartFile 但它返回错误。我也在这个视频中使用了代码,但它不起作用:

https://www.youtube.com/watch?v=c2tGUt7FLqY&t=318s

任何人都有解决方案。

4

2 回答 2

3

好的,我找到了,留给遇到同样问题的人

if (result != null) {    
  for (var file in result.files) {
    final formData = FormData.fromMap({
      ...someOtherData,
      'file': MultipartFile.fromBytes(file.bytes as List<int>)
    });
    
    dio.post(
      url,
      data: formData,
    );
  }
}
于 2021-09-30T05:03:35.387 回答
0

我想到了。我们不能使用“文件”,因为它使用了 Flutter WEB 不支持的“dart.io”库。所以我们必须使用“平台文件”,它使用了 Flutter WEB 支持的 'dart.html' 库。这是代码:

addStudent(
      {@required token,
      @required name,
      @required email,
      @required password,
      @required rollNo,
      @required phoneNo,
      @required PlatformFile? image,
      @required gender}) async {

    http.MultipartRequest request = http.MultipartRequest(
      "POST",
      Uri.parse('Your URL HERE'),
    );
    request.headers['Authorization'] = 'Bearer $token';

    request.fields['name'] = name;
    request.fields['email'] = email;
    request.fields['password'] = password;
    request.fields['gender'] = gender;
    request.fields['rollno'] = rollNo;
    request.fields['phoneNumber'] = phoneNo;

// Here is the code to upload image to API

    request.files.add(new http.MultipartFile(
        'image', image!.readStream!, image.size,
        filename: image.name));

    //-------Send request
    await request.send().then((value) async {
      //------Read response
      String result = await value.stream.bytesToString();

      //-------Your response
      print(result);
    });
  }
于 2021-09-30T06:43:24.630 回答