flutter 需要同时上传到后端服务器的 文件和 json
我自己的公网api
http://101.43.196.94:9300/uploadVideo
字段 | 类型 |
file | 文件 |
material | json |
服务器 使用 springboot 借助
@RequestPart(value = "file", required = false) MultipartFile file, @RequestPart("material") TbVideo tbVideo
注解里的参数 必须和前段的参数一致;
@PostMapping("/uploadVideos") public Result insertVideos(@RequestPart(value = "file", required = false) MultipartFile file, @RequestPart("material") TbVideo tbVideo) { //业务逻辑--- }
flutter 端
添加 权限 如果6.0 以上 需要动态权限 如果http 添加
android:usesCleartextTraffic="true"
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
添加 文件操作插件和dio
dio: ^4.0.6 path_provider: ^2.0.9
Directory tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path+"/b.jpg";
MultipartFile multipartFile = await MultipartFile.fromFile(tempPath,filename: "b.jpg" ,
contentType: MediaType.parse("image/jpeg")
);
//json 数据上传
Map<String ,dynamic> map = Map();
map["title"]="hello world";
map["userid"]=12344555;
map["content"]="sdsds";
map["videopath"]="sdsds";
map["title"]="hello world";
map["avatar"]="sdsds";
map["categoryid"]=33333;
var encode = json.encode(map);
MultipartFile multipartFiles = await MultipartFile.fromString(encode,contentType:MediaType.parse("application/json; charset=UTF-8") );
// "material":map,
FormData formData = FormData.fromMap({
"material":multipartFiles, // material 服务器对应的名称
"file": multipartFile, //file 服务器对应的名称
});
new Dio().post("http://192.168.1.4:80/uploadVideos",data:formData ).then((value){
print("--------${value.data.toString()}");
});
}