【问题标题】:Image is not uploading in base64 format using Alamofire and swift图片未使用 Alamofire 和 swift 以 base64 格式上传
【发布时间】:2020-09-11 20:19:35
【问题描述】:

我正在尝试以 base64string 格式上传图片。在这里,我使用 alamofire 和 swift 上传带有一些参数的图像。但是我的图片没有上传到服务器。请检查我的代码,让我知道我在哪里做错了。我的代码是:

func postRegistrationPlayerProfile(urlExtension: String, callback: @escaping(Bool,String?) -> Void,parameters:[String:Any]) -> Void {

      let fullURL = URL(string: urlExtension)!
          let manager = Alamofire.SessionManager.default
          manager.session.configuration.timeoutIntervalForRequest = TimeInterval(Common.sharedInstance().REQUEST_TIME_OUT)

          manager.upload(multipartFormData: { (multipartFormData) in
              for (key, value) in parameters {
                  multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: key as String)
              }
          }, usingThreshold: UInt64.init(), to: fullURL, method: .post) { (result) in
              switch result {
              case .success(let upload, _, _):
                  upload.responseJSON { (response : DataResponse<Any>) in
                      let responseDataString = Common.sharedInstance().getJSONStringFromData(data: response.data! as NSData)
                      print(responseDataString)
                      if let result = response.result.value {
                          let dictionary = result as! NSDictionary
                          let status = dictionary["status"] as! String
                          let message = dictionary["message"] as? String
                          if status == "success"{
                              callback(true,message)
                              return
                          }
                          else{
                              callback(false,message)
                              return
                          }

                      }
                      else{
                          callback(false,Common.sharedInstance().FAILED_BANNERIMG_UPLOAD)
                          return
                      }
                  }
              case .failure(let encodingError):
                  print("encodingError: \(encodingError)")
                  callback(false,Common.sharedInstance().FAILED_BANNERIMG_UPLOAD)
              }
          }
      }

我的参数是:

        paramters.updateValue(phone!, forKey: "phone")
        paramters.updateValue(state!, forKey: "state")
        paramters.updateValue(city!, forKey: "city")
        paramters.updateValue(zip!, forKey: "postcode")
        paramters.updateValue(travel, forKey: "travel_distance")
        paramters.updateValue(base64ImageString!, forKey: "profile_image")
        paramters.updateValue(country!, forKey: "country")

我正在将我的图像转换为 base64 字符串,例如:

  if let selectedImage = chooseProfileImage.image{
            if let data = selectedImage.jpegData(compressionQuality: 1){

                base64ImageString = data.base64EncodedString(options: .lineLength64Characters)

            }
        }

【问题讨论】:

  • 你尝试过使用邮递员吗?
  • 是的,在邮递员中它工作正常
  • 首先打印base64ImageString 值并在线尝试base64到图像转换器,以确保您转换的字符串是正确的。有时转换后的字符串缺少data:image/jpeg;base64 部分。
  • 嗨@Dilan 我转换的base64ImageString 不正确。我用在线工具检查了它。现在做什么?如何解决?
  • 你能检查转换后的以data:image/jpeg;base64开头的字符串吗?如果没有尝试将此部分添加到转换后的字符串的开头。例如data:image/jpeg;base64,{your converted strin}

标签: swift alamofire


【解决方案1】:

添加

url('data:image/jpeg;base64,)

我的 Base64 转换字符串对我有用:

if let selectedImage = chooseProfileImage.image{
           if let data = selectedImage.jpegData(compressionQuality: 1){
               let imageString = selectedImage.jpegData(compressionQuality: 1.0)?.base64EncodedString() ?? ""
           base64ImageString = "url('data:image/jpeg;base64,\(imageString)')"
               profileData = data
           }
       }

【讨论】:

  • 你是如何使用 multipart 发布这个字符串的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 2018-07-31
  • 2017-04-22
  • 2015-07-11
  • 1970-01-01
  • 2017-03-13
相关资源
最近更新 更多