Как загрузить многокомпонентные данные, используя Alamofire.upload с HTTPS-запросом? - PullRequest
0 голосов
/ 20 ноября 2018

Я сделал так, чтобы он работал с HTTP-запросом, но все еще не могу найти способ сделать HTTPS-запрос, используя alamofire / upload / multipartFormData.Кто-нибудь может помочь?

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]

1 Ответ

0 голосов
/ 20 ноября 2018

Поскольку вы уже используете 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)
            }
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...