首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Flutter Dio将MultipartFile对象动态添加到地图中

Flutter Dio将MultipartFile对象动态添加到地图中
EN

Stack Overflow用户
提问于 2021-01-15 19:00:41
回答 2查看 1K关注 0票数 0

我有自定义数据:

代码语言:javascript
运行
复制
File avatar = File('path/to/file');

Map<String, dynamic> data = {
  'name': 'John',
  'avatar': avatar
}

如何将我的数据作为FormData对象发送到服务器?

我尝试通过循环我的数据来创建MultipartFile类的对象,但在我的例子中,将文件路径作为文件的字符串实例发送。下面是我的代码:

代码语言:javascript
运行
复制
data.forEach((key, value) {
  if (value is File) {
    String fileName = value.path.split('/').last;
    data.update(key, (value) async {
      return await MultipartFile.fromFile(value.path, filename: fileName);
    });
  }
});

FormData formData = FormData.fromMap(data);
var response = await dio.post("/send", data: formData);

但是使用Dio,我可以上传类似这样的文件:

代码语言:javascript
运行
复制
FormData formData = FormData.fromMap({
    "name": "wendux",
    "age": 25,
    "file": await MultipartFile.fromFile(file.path,filename: fileName)
});

为什么无法将MultipartFile动态添加到我的Map中?

EN

回答 2

Stack Overflow用户

发布于 2021-01-15 19:47:49

您不是在等待数据

代码语言:javascript
运行
复制
await Future.wait(data.map((k, v){
if(v is File){
v = await MultipartFile.fromFile(value.path, filename: fileName);
}
  return MapEntry(k, v);
}));

请查看My async call is returning before list is populated in forEach loop

票数 0
EN

Stack Overflow用户

发布于 2021-01-15 21:42:48

你可以不带音频发送它。在这里,我编写了整个代码,包括库和response.Please测试,下面的代码是因为在我的情况下,dio不起作用,而您的情况与我的情况非常相似。

就是send it with simple http request

代码语言:javascript
运行
复制
import 'package:http/http.dart' as http;
import 'package:http_parser/http_parser.dart';
import 'package:mime/mime.dart';

   Map<String, String> headers = {
      'Content-Type': 'multipart/form-data',        
    };

    Map jsonMap = {
      "name": "wendux",
      "age": 25,          
    };
 String imagePath, // add the image path in varible 

 var request = http.MultipartRequest('POST', Uri.parse(url));
    request.headers.addAll(headers);
    request.files.add(
      http.MultipartFile.fromBytes(
        'orderStatusUpdate',
        utf8.encode(json.encode(jsonMap)),
        contentType: MediaType(
          'application',
          'json',
          {'charset': 'utf-8'},
        ),
      ),
    );

    if (imagePath != null) {
      final mimeTypeData = lookupMimeType(imagePath).split('/');
      final file = await http.MultipartFile.fromPath('images', imagePath,
          contentType: MediaType(mimeTypeData[0], mimeTypeData[1]));
      print((mimeTypeData[0].toString())); // tells picture or not
      print((mimeTypeData[1].toString())); // return extention
      request.files.add(file);
    }

    http.StreamedResponse streamedResponse = await request.send();
    var response = await http.Response.fromStream(streamedResponse);
    print(response.statusCode);
    print(response.body);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65734895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档