在 Flutter 中上传带有 http.post 和注册表单的图像?

Posted

技术标签:

【中文标题】在 Flutter 中上传带有 http.post 和注册表单的图像?【英文标题】:Upload image with http.post and registration form in Flutter? 【发布时间】:2020-03-05 16:56:18 【问题描述】:

所以我想用一堆其他变量(字符串)将文件(图像)上传到服务器

字符串 firstname , lastname ,birthDay, phone , adresse ;文件图片;

return http.post(
  uri,
  headers: 
    'Accept': 'application/json',
    "Authorization": "Bearer $token",
  ,
  body: body,
  encoding: encoding,
);

Future<http.Response> postRegisteration() async 
    return await api.httpPost('fotApp/master', body: 
        'firstname': 'lorem',
        'lastname': 'lorem',
        'birthDay': 'lorem',
        'adresse': 'lorem',
        'phone': 'lorem',
        'image': 'lorem'
      ).then((reponse) 
        var data = jsonDecode(reponse.body);
        print(data);
    );

【问题讨论】:

【参考方案1】:

试试这样的

在fileList中,你应该添加任何你想上传的文件

    List<MultipartFile> fileList = List();
    fileList.add(MultipartFile.fromBytes(
        'documents', await filePath.readAsBytes(),
        filename: fileName));

其他部分参数使用params map

    Map<String, String> params = 
      "first_name": widget.mUserDetailsInputmodel.firstName,
      "last_name": widget.mUserDetailsInputmodel.lastName,
      "email": widget.mUserDetailsInputmodel.emailAddress,
    ;

然后像这样发送请求

  Future<String> multipartRequest(var url, var partParams, var files) async 
    Map<String, String> headers = 
      "X-API-KEY": X_API_KEY,
      "Accept": "application/json",
      "User-Auth-Token": authToken ;
    var request = http.MultipartRequest("POST", Uri.parse(url));
    request.headers.addAll(headers);

    if (partParams != null) request.fields.addAll(partParams);// add part params if not null
    if (files != null) request.files.addAll(files);// add files if not null

    var response = await request.send();
    var responseData = await response.stream.toBytes();
    var responseString = String.fromCharCodes(responseData);
    print("responseBody " + responseString);
    if (response.statusCode == 200) return responseString;
  

【讨论】:

非常感谢兄弟,我明天会在工作中测试解决方案,看看它是否正确,但只要看看它我就知道它应该可以工作

以上是关于在 Flutter 中上传带有 http.post 和注册表单的图像?的主要内容,如果未能解决你的问题,请参考以下文章

Http POST 在 Postman 中有效,但在 Flutter 中无效

为啥我在flutter中更新http包后不能在http.post方法中放一个字符串

Flutter DIO:使用带有 Dio 包的二进制体上传图像

Facebook API 使用带有多部分表单数据的 HTTP POST 请求的错误响应

Flutter 上传带有进度条的大文件。 App 和 Web 都支持

如何在 Flutter/Dart 中使用 url 编码的标头和正文发出 HTTP POST 请求