如何使用Alamofire将SwiftUI图像上传到后端

问题描述 投票:0回答:1

正如标题所述,我很好奇如何使用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数据类型。

swift swiftui alamofire
1个回答
0
投票

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
         }
      }
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.