在Flutter中使用dio上传多部分图像文件的问题

时间:2020-09-15 07:31:04

标签: flutter dart file-upload multipartform-data dio

我使用 Dio 框架将图像上传到Flutter应用程序中的服务器。 Dio版本3.0.9。 发布方法。 添加了4个标题 使用图像和其他字段创建表单数据。

我分析了更多的方法。就像将Dio降级为 2.3.1 一样,可以使用 UploadFileInfo 方法。没有成功。然后使用 multipartfileupload 。最后一个。

Future<bool> createStoreWithDio() async {
    Map<String, String> headers = {
      "Accept": "application/json",
      "authorization": tokenString,
      "authtype": "admin",
      "Content-Type": "multipart/form-data"
    };
    try {
      FormData formData = new FormData.fromMap({
        "logo": await http.MultipartFile.fromPath("logo", imageFile.path,
            contentType: new MediaType('image', 'png')),
        "name": " Bala ios",
        "description": "_description",
        "website": "www.website.com",
        "password": "Test password",
        "user_name": "Test userInformationName",
        "mobile": "9988776655",
        "email": "test@techit.io",
   
      });

      print(formData.fields);
      Response response = await dio
          .post(
        "API",
        data: formData,
        options: Options(
          headers: headers,
        ),
      )
          .then((value) {
        print(value.toString());
      });
      print(response.toString());
    } catch (error) {
      print(error);
    }
  }

imageFile 是我从相机/图库中捕获的文件。

我得到 500 例外。任何帮助都会有帮助

1 个答案:

答案 0 :(得分:1)

我不确定是什么原因造成的,此代码是否在我根据您的代码进行了更改的应用程序中使用,但是我没有发送任何标头,因此您需要添加然后尝试使用此代码,让我知道它适用您。还要确保您拥有文件imageFile.path,并且您的api网址正确无误 确保已导入

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

 Dio dio = new Dio();
      final mimeTypeData =
      lookupMimeType(imageFile.path, headerBytes: [0xFF, 0xD8]).split('/');
      FormData formData = FormData.fromMap({
        "name": " Bala ios",
        "description": "_description",
        "website": "www.website.com",
        "password": "Test password",
        "user_name": "Test userInformationName",
        "mobile": "9988776655",
        "email": "test@techit.io",
        "logo": await MultipartFile.fromFile(imageFile.path,
            contentType: MediaType(mimeTypeData[0], mimeTypeData[1])),
      });

      var response = await dio.post(
        Urls.ImageInsert,
        data: formData,
      );

      var message = response.data['message'];