ios - 多部分请求 - 带有 UIImage 的可编码结构
问题描述
使用 Swift 5,我试图减少很多依赖项(Alamofire),并且我试图了解如何在使用 Codable 和 URLRequest 时执行多部分请求
我的代码可以正常工作以创建具有名称和电子邮件的用户,但我需要将头像添加到结构中。
添加头像后,如何对结构进行编码以便成为多部分请求。我在网上找到了一些解决方案,但不适用于我正在尝试实施的场景。
下面的代码是没有头像的请求的工作代码。
struct User: Codable {
let name: String
let email: String?
}
var endpointRequest = URLRequest(url: endpointUrl)
endpointRequest.httpMethod = "POST"
endpointRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
do {
endpointRequest.httpBody = try JSONEncoder().encode(data)
} catch {
onError(nil, error)
return
}
URLSession.shared.dataTask(
with: endpointRequest,
completionHandler: { (data, urlResponse, error) in
DispatchQueue.main.async {
self.processResponse(data, urlResponse, error, onSuccess: onSuccess, onError: onError)
}
}).resume()
解决方案
UIImage
不符合,Codable
但您可以对表示进行编码pngData
。但是,这需要实现Codable
方法
struct User: Codable {
let name: String
let email: String?
var avatar : UIImage?
private enum CodingKeys : String, CodingKey { case name, email, avatar }
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
name = try container.decode(String.self, forKey: .name)
email = try container.decodeIfPresent(String.self, forKey: .email)
if let avatarData = try? container.decode(Data.self, forKey: .avatar) {
avatar = UIImage(data: avatarData)
}
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(name, forKey: .name)
try container.encode(email, forKey: .email)
if let avatarImage = avatar {
try container.encode(avatarImage.pngData(), forKey: .avatar)
}
}
}
或者声明avatar
为 URL 并单独发送图片
推荐阅读
- django - 我尝试测试但有导入测试错误,那么问题是什么?
- javascript - 我想要我的
在 CSS 中 5 秒后显示的标签
- java - 如何在 spring-boot config-server 中为 git repo 配置后备 uri
- java - 媒体存储在哪些文件夹中收集文件?
- scala - 参数解构
- python - AttributeError:“IntVar”对象没有属性“config”
- computability - 用于说明停机问题的程序输入
- python - 如何以 Django 表单显示下拉列表?
- python - 问题。python抓取请求+硒
- firebase - 两个 StreamBuilder 使用一个 stream(); 它会增加读取次数吗?