Loading... 我们通常使用Dio发送FormData来上传文件。 ```dart FormData formData = FormData.fromMap({ "name": "wendux", "age": 25, "file": await MultipartFile.fromFile("./text.txt",filename: "upload.txt") }); var response = await Dio().post("/info", data: formData); ``` 事实上,这样就可以实现文件上传的功能了。 但是问题来了,`MultipartFile.fromFile`这个方法返回的`contentType`是`application/octet-stream`。这样的话我们后端接收文件的时候可能就无法判断我们上传文件的类型。所以我们就需要手动来指定我们上传文件的`contentType`。(其实我个人觉得这种做法很蠢) ```dart // 需要上传文件的路径 String filePath = "./abc.pdf"; // 获取到文件名 Uri fileUri = Uri.dataFromString(filePath); List<String> pathSegments = fileUri.pathSegments; String fileName= pathSegments.last(); // 获取文件扩展名 List<String> fileNameSegments = fileName.split('.'); String fileExt = fileNameSegments.last(); /// 手动指定上传文件的contentType MediaType mediaType; switch(fileExt.toLowerCase()) { case "pdf": mediaType = MediaType("application", "pdf"); break; case "jpg": mediaType = MediaType("image", "jpeg"); break; case "png": mediaType = MediaType("image", "png"); break; default: mediaType = MediaType("application", "octet-stream"); } /// 上面的代码我们修改一下 await MultipartFile.fromFile("./text.txt",filename: "upload.txt", contentType: mediaType); ``` 最后修改:2021 年 05 月 15 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 如果觉得我的文章对你有用,请随意赞赏