Flutter使用Dio向Ubuntu服务器上传文件时遇405状态码错误求助
解决Flutter Dio上传文件返回405错误的思路
405错误的核心是服务器不允许当前请求方法(POST)访问目标URL,可以从以下几个方向排查:
确认服务器端的上传端点配置
检查Ubuntu服务器上的后端服务(比如Nginx路由规则、后端框架的接口定义),确保你请求的URL(http://h4053796.stratoserver.net)支持POST方法。多数情况下,根路径默认只处理GET请求,你需要使用后端专门定义的上传接口路径(比如/upload)。修正FormData参数
你的代码里FormData包含files: filePath这个本地路径字符串,服务器大概率不需要这个参数,容易导致解析异常。建议去掉该参数;同时强制指定filename: 'upload.jpg'可能不符合实际文件类型,改成动态获取原文件名更稳妥。验证请求URL正确性
确认服务器上是否存在处理文件上传的具体接口,比如后端可能提供的是http://h4053796.stratoserver.net/api/upload这类路径,而非直接请求根域名。
修改后的示例代码:
class FileUploader { static Future uploadFile({String? filePath}) async { try { if (filePath == null) return; // 动态获取原文件名 final fileName = filePath.split('/').last; final formData = FormData.fromMap({ 'name': 'dio', 'date': DateTime.now().toIso8601String(), 'file': await MultipartFile.fromFile(filePath, filename: fileName), }); // 替换为服务器实际的上传接口路径 final response = await Dio().post('http://h4053796.stratoserver.net/upload', data: formData); print(response.data); } catch (e) { print(e); } } }
内容的提问来源于stack exchange,提问作者cwf
相关产品推荐
相关产品推荐

