使用 dio 包上传图片失败

Posted

技术标签:

【中文标题】使用 dio 包上传图片失败【英文标题】:image uploading failing using dio package 【发布时间】:2019-08-30 08:09:39 【问题描述】:

我正在尝试使用 Dio 包在颤振中上传图像,但它失败了。我需要在 formdata 中发送一张图片。

API >> 需要请求正文为imageUpload:image

图片上传代码

 static Future uploadProfilePicToS3(File imageFile) async 
    try 
      FormData formData = new FormData.from(
          'imageUpload': new UploadFileInfo(imageFile, "profile_pic.jpg"));
      var response =
          await Dio().post(UPLOAD_PROFILE_PIC, data: 'imageUpload': formData);
      print(response.statusCode);
     catch (error) 
      throw (error);
    
  

错误 >>>

E/flutter (4025): [错误:flutter/lib/ui/ui_dart_state.cc(148)] 未处理的异常:DioError [DioErrorType.DEFAULT]:正在转换 对象到可编码对象失败:“UploadFileInfo”实例#0

如果有其他方法,请告诉我。

【问题讨论】:

参考此链接***.com/questions/44841729/… 我已经这样做了,但是我的 API 接受请求的正文为 >>> imageUpload: formaData 我很困惑如何发送像 imageUpload: formData 这样的正文 您只想上传图片或表单数据。 我想将图像文件转换为表单数据,然后使用 key imageUpload 将其发送到请求正文中 我的事情不是正确的方式图像总是上传到部分。 【参考方案1】:

使用此代码

Future<ImageProperty> uploadImage(File imageFile, processfunction) async 
    final StringBuffer url = new StringBuffer(BASE_URL + "/wp-json/wp/v2/media");
 
     Dio dio = new Dio();
     var token = await _getToken();
     try 
        FormData formData = FormData.fromMap(
          "file": await MultipartFile.fromFile(imageFile.path),
        );
        print(url);
       if (token != null) 
          dio.options.headers["Authorization"] = "Bearer $token";

          print(dio.options.headers);
        
      var response = await dio.post(
         url.toString(),
         data: formData,
         onSendProgress: processfunction,
     );

     print(response.data);
      return Future.value(response.data);
    on DioError catch (e) 
     print(e);
 

【讨论】:

【参考方案2】:

我使用dio 以这种方式发布带有其他信息的文件路径:

  Dio dio = new Dio();
  FormData formData = new FormData();
  formData.add(
    "apiKey",
    "my_api_key",
  );
  formData.add(
    "file",
    "image_path",
  );
  Response response = await dio.post(
    "https://localhost",
    data: formData,
    onSendProgress: (int sent, int total) 
      // do something
    ,
  ).catchError((onError) 
    throw Exception('something');
  );

【讨论】:

以上是关于使用 dio 包上传图片失败的主要内容,如果未能解决你的问题,请参考以下文章

android开发里跳过的坑——图片文件上传失败

Flutter 如何处理401 未授权的 Dio 拦截器

微信换头像显示上传失败怎么办

php为啥上传图片会失败

为啥我提问想法张图,老是图片上传失败

如果你上传的图片失败了