You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:02:06