[英]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.