正如标题所述,我很好奇如何使用Alamofire将SwiftUI的图片上传到后端。我遇到的每个代码示例和教程都依赖于利用UIImage,但是我正在SwiftUI中工作,它不使用UIImage。
这里是我在这里找到的功能(upload image from multipart-from-data using Alamofire '~> 5.0.0-beta.3'),正在尝试使其适用于我的用例:
func uploadPhoto(
url: String,
image: Image,
params: [String : Any],
header: [String:String]) {
let httpHeaders = HTTPHeaders(header)
AF.upload(multipartFormData: { multiPart in
for p in params {
multiPart.append("\(p.value)".data(using: String.Encoding.utf8)!, withName: p.key)
}
multiPart.append(image.jpegData(compressionQuality: 0.4)!, withName: "avatar", fileName: "file.jpg", mimeType: "image/jpg")
}, to: url, method: .post, headers: httpHeaders)
.responseJSON{ response in
switch response.result {
case .success(let resut):
print("upload success result: \(resut)")
case .failure(let err):
print("upload err: \(err)")
}
}
}
但是语句image.jpegData(compressionQuality: 0.4)!
给我错误Value of type 'Image' has no member 'jpegData'
。
一些研究告诉我,这是由于我试图使用SwiftUI的Image数据类型而不是UIKit的UIImage。由于UI内的相关情况,我更喜欢使用Image数据类型。
SwiftUI Image
是一个视图,您需要数据。 UIImage
是数据,因此请单独使用它以将其显示在Image
中并上传到数据库中。
这里是一个例子(用伪代码):
struct ImageHolderView: View {
let image: UIImage // << data
var body: some View {
VStack {
Image(uiImage: image) // << present
Button("Upload") {
upload(to: url, data: image.jpegData) // << upload
}
}
}
}