簡體   English   中英

如何使用Alamofire.upload和HTTPS請求上傳分段數據?

[英]How to Upload Multipart Data Using Alamofire.upload with HTTPS Request?

我已經使它可以處理HTTP請求,但是仍然找不到使用alamofire / upload / multipartFormData進行HTTPS請求的方法。 有人可以幫忙嗎?

func UploadUserPhoto (Photo: UIImage, Username: String, completion: @escaping (_ result: Bool) -> Void){
    let serverTrustPolicy = ServerTrustPolicy.pinCertificates(
        certificates: ServerTrustPolicy.certificates(),
        validateCertificateChain: true,
        validateHost: true
    )
    let serverTrustPolicies: [String: ServerTrustPolicy] = [
        "***********": serverTrustPolicy,
    ]
    let sessionManager = SessionManager(
        serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
    )
    let parameters = ["Authorization": Token ?? "Does not contain authorization information"]
    sessionManager.upload(multipartFormData: { multipartFormData in
        if let imageData = Photo.jpegData(compressionQuality: 1) {
            multipartFormData.append(imageData, withName: "Photo", fileName: "file.png", mimeType: "image/png")
        }
        for (key, value) in parameters {
            multipartFormData.append((value.data(using: .utf8))!, withName: key)
        }}, to: "https://***********/uploaduserphoto/\(Username)", method: .post, headers: parameters,
            encodingCompletion: { encodingResult in
                switch encodingResult {
                case .success(let upload, _, _):
                    upload.response(completionHandler: { (response) in
                        if response.response?.statusCode == 200{
                            completion(true)
                        } else {
                            completion(false)
                        }
                    })
                case .failure(let encodingError):
                    print("error:\(encodingError)")
                    completion(false)
                }
    })
}

更新:我終於發現代碼是好的,證書是壞的。 重新創建自簽名證書后,我開始工作。 謝謝

錯誤表明:

2018-11-20 12:49:45.130697+0800 TalentBaby1.0[1359:288066] Task <09FA46A5-9791-42DB-97AD-78A351050916>.<1> load failed with error Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLStringKey=https://*******/uploaduserphoto/User, NSErrorFailingURLKey=https://*******/uploaduserphoto/User, _NSURLErrorRelatedURLSessionTaskErrorKey=("LocalUploadTask <09FA46A5-9791-42DB-97AD-78A351050916>.<1>"), _NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask <09FA46A5-9791-42DB-97AD-78A351050916>.<1>, NSLocalizedDescription=cancelled} [-999]

由於您已經在使用Alamofire,請嘗試使用其上載而不是SessionManager上載。 嘗試這個 :

func UploadUserPhoto(Photo: UIImage, Username: String, completion: @escaping (_ result: Bool) -> Void){

    let headers = ["Authorization": Token ?? "Does not contain authorization information"]

    Alamofire.upload(multipartFormData:{ multipartFormData in
        if let imageData = Photo.jpegData(compressionQuality: 1) {
            multipartFormData.append(imageData, withName: "Photo", fileName: "file.png", mimeType: "image/png")
        }
    },
                     usingThreshold:UInt64.init(),
                     to:"https://***********/uploaduserphoto/\(Username)",
        method:.post,
        headers:headers,
        encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                upload.response(completionHandler: { (response) in
                    if response.response?.statusCode == 200{
                        completion(true)
                    } else {
                        completion(false)
                    }
                })
            case .failure(let encodingError):
                print("error:\(encodingError)")
                completion(false)
            }
    })
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM