用http.post上传图片,并在Flutter中注册?

用http.post上传图片,并在Flutter中注册?,http,post,flutter,flutter-layout,flutter-dependencies,Http,Post,Flutter,Flutter Layout,Flutter Dependencies,所以我想用一堆其他变量(字符串)将一个文件(图像)上传到服务器 字符串firstname、lastname、生日、电话、地址;文件图像 return http.post( uri, headers: { 'Accept': 'application/json', "Authorization": "Bearer $token", }, body: body, encoding: encoding, ); Future<http.Response>

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

字符串firstname、lastname、生日、电话、地址;文件图像

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);
    });
}
返回http.post(
乌里,
标题:{
“接受”:“应用程序/json”,
“授权”:“持票人$token”,
},
身体:身体,,
编码:编码,
);
Future postRegistration()异步{
返回等待api.httpPost('fotApp/master',正文:{
“firstname”:“lorem”,
“lastname”:“lorem”,
‘生日’:‘lorem’,
“adrese”:“lorem”,
“电话”:“lorem”,
“图像”:“lorem”
}).然后((回复){
var data=jsonDecode(response.body);
打印(数据);
});
}

试试这样的方法

  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;
  }

在文件列表中,您应该添加任何要上载的文件

    List<MultipartFile> fileList = List();
    fileList.add(MultipartFile.fromBytes(
        'documents', await filePath.readAsBytes(),
        filename: fileName));
List fileList=List();
添加(MultipartFile.fromBytes(
“文档”,等待filePath.readAsBytes(),
文件名(filename:filename));
对于其他零件参数,请使用参数映射

    Map<String, String> params = {
      "first_name": widget.mUserDetailsInputmodel.firstName,
      "last_name": widget.mUserDetailsInputmodel.lastName,
      "email": widget.mUserDetailsInputmodel.emailAddress,
    };
Map参数={
“first_name”:widget.mUserDetailsInputmodel.firstName,
“姓氏”:widget.mUserDetailsInputmodel.lastName,
“电子邮件”: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;
  }

Future multipartRequest({var url,var partParams,var files})异步{
映射头={
“X-API-KEY”:X_API_密钥,
“接受”:“应用程序/json”,
“用户身份验证令牌”:authToken};
var request=http.MultipartRequest(“POST”,Uri.parse(url));
request.headers.addAll(headers);
if(partParams!=null)request.fields.addAll(partParams);//如果不为null,则添加部分参数
if(files!=null)request.files.addAll(files);//如果不为null,则添加文件
var response=wait request.send();
var responseData=wait response.stream.toBytes();
var responseString=String.fromCharCodes(responseData);
打印(“responseBody”+responseString);
如果(response.statusCode==200)返回responseString;
}

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