如果用户未在 api 调用中上传个人资料图片,如何更新用户数据

Posted

技术标签:

【中文标题】如果用户未在 api 调用中上传个人资料图片,如何更新用户数据【英文标题】:How to Update User data if user not uploaded Profile Picture In api call 【发布时间】:2021-12-10 21:40:59 【问题描述】:

我正在创建一个应用程序,用户可以在其中更新用户个人资料。但是,如果用户不想更改图像并且只更改名字或姓氏,而不更改个人资料图片怎么办。可以请一些指导我,我正在使用 Alamofire 和 awss3 上传图片,这是我的代码

func saveProfile(imagename: String )

    
    if self.firstNameTxt.text!.isEmpty || self.lastNameTxt.text!.isEmpty || self.birthDateTxt.text!.isEmpty   
        let alertController = UIAlertController(title: "Error", message: "Please Fill All THE FIELDS", preferredStyle: .alert)
        
        let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
        alertController.addAction(defaultAction)
        
        present(alertController, animated: true, completion: nil)
        
     else 
        let parameter : Parameters = [
            
            "first_name": self.firstNameTxt.text!,
            "last_name": self.lastNameTxt.text!,
            "birth_date" : self.birthDateTxt.text!,
            "profile_pic" : imagename
        ]
        
        SVProgressHUD.show()
        
        MVCServer().serviceRequestWithURL(reqMethod: .patch, withUrl: "user-profile", withParam: parameter, diplayHud: true, includeToken: true)  responseCode, response in
            if responseCode == 1 
                if let dataResponse =  response.value(forKey: "result") as? Bool , let payload = response.value(forKey: "payload") as? NSDictionary
                    if dataResponse  == true 
                        
                        if let userData = LoginModel.init(dictionary: payload) 
                            Utility.setModelObject(userData , forKey: ProfileData)
                            self.view.makeToast("Profile Updated Succefully", duration: 3.0, position: .top)
                            
                        
                    
                
                
             else 
                Utility.showMessage("Error", withTitle: "Error While Uploading Data", on: self)
                print(response.value(forKey: "message") as? String ?? "")
                SVProgressHUD.dismiss()
            
        
        
    

这是我的保存按钮操作

 @IBAction func saveButtonTapped(_ sender: UIButton) 
    
    uploadImage()
   

我在这里调用 Uploading Image Api。

func uploadImage()

    if let profileImageData = profileImageData
    
        let imageName:Int64  = Int64(Date().timeIntervalSince1970)
        let randomString = Utility.getAlphaNumericRandomNumber()
        let imageNameStr = String(format:"%@%d.jpg",randomString,imageName)
        let stringUploadPath = String(format:"%@/%@",AmazonAWS3.S3UploadPathProfile,imageNameStr)
        Utility.showLoadingView()
        AmazonAWS3().uploadFileToAWS3(filePath: stringUploadPath, data: profileImageData)  result in
            switch result 
            case .success(_):
                self.saveProfile(imagename: imageNameStr)
            case .failure(_):
                
                print("Error While Uploading Image")
            
        
    

【问题讨论】:

如果用户不更改个人资料图片而只更改其他信息,您到底想要什么? 调用函数只更新数据而不更新图像。我的意思是只有名字或姓氏应该改变。 您需要使用 2 个布尔值来处理此问题,您可以通过将新值与旧值进行比较来检查任何已更改的用户数据字段。一旦用户更改头像并在个人资料图像上设置,头像更改也是如此,相应地更改布尔值并调用 API。 【参考方案1】:

根据您的实施,最简单的方法是在您的 VC(或 VM 或您需要的地方)中使用一个字典,该字典存储您的用户已更改的更新值。

class ProfileViewController: UIViewController 

   @IBOutlet var firstNameLabel: UILabel!
   @IBOutlet var lastNameLabel: UILabel!

   var updatedValues: [String : String] = [:] // or [String : Any] 

   // If you are using Storyboard you need to link the IBOutlet to the value changed event
   @IBOutlet func firstName_onChange(_ sender: UILabel) 
      // do some validation 
      updatedValues["first_name"] = sender.text
   

   // Same outlet for lastName and birthdate


对于您的图像,您如何生成imagename 有点不清楚,但您可以使用相同的方法。当用户从图库中选择图片时,您可以通过添加 profile_pic 键/值来更新 updatedValues

在执行saveProfile 时,您的updatedValues 应该只包含用户更改的内容,如果包含profile_pic 键,您还可以调用uploadImage

【讨论】:

以上是关于如果用户未在 api 调用中上传个人资料图片,如何更新用户数据的主要内容,如果未能解决你的问题,请参考以下文章

如何检查Google用户的图片是默认图片还是上传图片?

如何上传个人资料图片并在身份 asp.net core 3 中更新

图片上传/接收API

如何使用 React 和 Next 上传照片?

用户如何在我的 codeigniter 注册表单上上传个人资料图片

如何使用他们的 API 显示 Instagram 个人资料图片