迅速使用Alamofire多部分功能将图像上传到服务器

  1. 在用户抵制期间,我正在将一些照片上传到服务器。第一个是个人资料照片。电阻处理完成后,我想上传其余照片。意味着我要在获取用户ID和访问令牌后上传照片。意味着在成功上传图像之后,用户将进入“ matchesViewController”,然后仅启动上传过程。我也想在后台线程中上传这些照片。同样,如果应用程序在后台冲洗,则上传过程也应继续。所有上传过程均由Alamofire完成。

  2. 通过编写以下代码,照片可以成功上传,但是需要更多时间。这不是良好的用户体验。

  3. 还请告诉我当应用程序在后台线程中运行时如何继续上传过程。

  4. 如果代码不好,请根据需要帮助我修改代码中的任何更改。

我的代码是:-

private func handleRegistration (_ parameterDict : [String : Any]){

    let url = USER_REGISTER_URL
    let headers: HTTPHeaders = [
        "Content-Type": "application/x-www-form-urlencoded"

    ]


    Alamofire.upload(multipartFormData: { (multipartFormData) in
        for (key,value) in parameterDict {

            multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!,withName: key as String)
        }
        let random = randomString(length: 7)
        multipartFormData.append(self.selectedProfilePic.image!.jpegData(compressionQuality: 0.4)!,withName: "fileset",fileName: "\(random).jpg",mimeType: "image/jpg")




    },usingThreshold: UInt64.init(),to: url,method: .post,headers: headers) { (result) in
        switch result{
        case .success(let upload,_,_):
            upload.responseJSON { response in
                print(response)

                var userId: String?
                var token: String?
                if let result = response.result.value {
                    let JSON = result as! NSDictionary



                    guard let accessToken = JSON["access_token"] as? String
                        else{ return }


                    guard let uid = JSON["User_Id"] as? String
                        else{return}
                    userId = uid
                    token = "bearer " + accessToken


                    UserDefaults.standard.set(Int(uid),forKey: "User_Id")
                    UserDefaults.standard.set(token,forKey: "access_token")


                    let phone = JSON["Phone_Number"] as? String
                    let FirstName = JSON["FirstName"] as? String

                    let email = uid + "@gmail.com"
                    let tempDictionary : Dictionary = [kFIRSTNAME : FirstName!,kLASTNAME : "",kFULLNAME : FirstName!,kPHONE : phone!,kREGISTERUSEID: userId,kEMAIL: email] as [String : Any]


                    self.checkdevicetokenAvailibility(uid: Int(userId!)!)
                    self.startRegistrationWithFirebase( detailDict: tempDictionary)

                    let storyBoard = uistoryboard(name: "Main",bundle: nil).instantiateViewController(withIdentifier: "MainTabbarView")
                    storyBoard.modalPresentationStyle = .fullScreen
                    self.present(storyBoard,animated: true,completion: nil)



                    if let message = JSON["Message"] as? String{

                        if message == "Please Upload a image."{

                        }
                    }

                }

                if userId != nil  && token != nil{



                    self.multiImageUpload(userId: Int(userId!)!,token: token!)
                }
                print("Succesfully uploaded")




                if let err = response.error{
                    //                            onError?(err)
                    //                            print(err.localizedDescription)
                    return
                }
                //                        onCompletion?(nil)
            }
        case .failure(let error):
            print("Error in upload: \(error.localizedDescription)")
            //                    onError?(error)
        }
    }
}
hyk123456789 回答:迅速使用Alamofire多部分功能将图像上传到服务器

减少上传时间的一种方法是使用for循环并使用Alamofire发送特定部分,一次发送多个部分。这样,它可以将其分解为多个部分,从而减少了发送时间。缺点是在服务器端,您将必须重建图像。

  

如果代码不好,请根据需要帮助我修改代码中的任何更改。

似乎您的代码中有很多任意空间。

本文链接:https://www.f2er.com/3131407.html

大家都在问