Swift中使用Alamofire发送带Form-Data的POST请求遇错求助
解决Alamofire上传Multipart表单时API返回错误及SSL警告问题
先给你梳理下代码里的核心问题,一步步来解决:
1. 错误设置Content-Type请求头是API返回错误的关键原因
你手动指定了"Content-Type": "application/form-data",但Alamofire处理multipart表单上传时,会自动生成带boundary的正确Content-Type头,手动设置会覆盖掉这个自动生成的内容,导致服务器完全无法解析你的表单数据——这几乎肯定是API返回错误的根源。
直接把headers里的Content-Type删掉就行:
let headers = [ "X-App-Token": user.token! ]
2. 强制解包可选值存在崩溃隐患
UIImagePNGRepresentation(imgToSend)和titleToSend.data(using: .utf8)都可能返回nil(比如图片损坏、title是空字符串等),直接用!强制解包会导致崩溃,建议换成可选绑定处理:
Alamofire.upload(multipartFormData:{ multipartFormData in // 安全处理图片数据 if let pngData = UIImagePNGRepresentation(imgToSend) { multipartFormData.append(pngData, withName: "image") } else { print("图片转PNG数据失败") return } // 安全处理title数据 if let titleData = titleToSend.data(using: .utf8) { multipartFormData.append(titleData, withName: "title") } else { print("title转UTF8数据失败") return } }, usingThreshold: UInt64(0), to: url!, method: .post, headers: headers, encodingCompletion: { encodingResult in switch encodingResult { case .success(let upload, _, _): upload.responseJSON { response in debugPrint(response) // 这里可以进一步排查服务器返回的具体错误 if let serverError = response.result.error { print("请求错误详情: \(serverError)") } if let responseJson = response.result.value as? [String: Any] { print("服务器返回内容: \(responseJson)") } } case .failure(let encodingError): print("表单编码失败: \(encodingError)") } })
3. 关于SSL警告的说明
你看到的[BoringSSL]警告,多数情况下是因为服务器在解析错误的表单数据后,提前断开了连接导致的。解决前面的Content-Type问题后,这个警告大概率会自动消失。如果还存在,再排查是否是HTTPS证书的问题(比如自签名证书未配置信任)。
最后建议你在responseJSON里打印服务器返回的具体内容,这样能更精准定位API返回错误的细节。
内容的提问来源于stack exchange,提问作者Gorthez
相关产品推荐
相关产品推荐

