【问题标题】:When using the Alamofire.upload method with Alamofire 4.0.0, an error returns and i cannot find the solution在 Alamofire 4.0.0 中使用 Alamofire.upload 方法时,返回错误,我找不到解决方案
【发布时间】:2016-12-22 17:56:48
【问题描述】:
if let img = ImageSelectorImg.image , imageSelected == true{

            let urlStr = "https://post.imageshack.us/upload_api.php"
            let url = URL(string: urlStr)!
            let imgData = UIImageJPEGRepresentation(img, 0.2)!
            let keyData = "AEHKL...66b".data(using: String.Encoding.utf8)!
            let keyJSON = "json".data(using: String.Encoding.utf8)!

            Alamofire.upload(.POST,url,multipartFormData: { multipartFormData in
                    multipartFormData.appendBodyPart(data: imgData, name: "fileupload", fileName:"image", mimeType: "image/jpg")
                    multipartFormData.appendBodyPart(data: keyData, name: "key")
                    multipartFormData.appendBodyPart(data: keyJSON, name: "format")
                },

                encodingCompletion: { encodingResult in

                    switch encodingResult {

                    case .success(let upload, _, _):

                        upload.responseJSON { response in

                            if let info = response.result.value as? Dictionary<String,AnyObject> {

                                if let links = info["links"] as? Dictionary<String,AnyObject> {

                                    if let imgLink = links["image_link"] as? String {
                                        self.postToFirebase(imgLink)
                                    }
                                }
                            }
                        }
                    case.failure(let _): break
                    }
            })
        }

当我运行上面的代码时,出现错误“对成员 'upload'(_:to:method:headers:) 的模糊引用”,我不确定解决方案是什么。请帮忙。谢谢。

【问题讨论】:

    标签: xcode swift3 alamofire


    【解决方案1】:

    您需要为 url 提供参数并删除方法名称。

    Alamofire.upload(
    multipartFormData: {multipartFormData in
                    multipartFormData.appendBodyPart(data: imgData, name: "fileupload", fileName:"image", mimeType: "image/jpg")
                    multipartFormData.appendBodyPart(data: keyData, name: "key")
                    multipartFormData.appendBodyPart(data: keyJSON, name: "format")
                },
    to: "https://httpbin.org/post", //URL,
    encodingCompletion: { encodingResult in
        switch encodingResult {
        case .success(let upload, _, _):
            upload.responseJSON { response in
                debugPrint(response)
            }
            upload.uploadProgress(closure: { //Get Progress
                    progress in
                        print(progress.fractionCompleted)
                })
        case .failure(let encodingError):
            print(encodingError)
        }
    })
    

    【讨论】:

      【解决方案2】:

      您使用的是较旧的 upload 语法。应该是:

      if let img = ImageSelectorImg.image, imageSelected {
          let urlStr = "https://post.imageshack.us/upload_api.php"
          let url = URL(string: urlStr)!
          let imgData = UIImageJPEGRepresentation(img, 0.2)!
          let keyData = "AEHK...d66b".data(using: .utf8)!  // key removed for sake of privacy
          let keyJSON = "json".data(using: .utf8)!
      
          Alamofire.upload(multipartFormData: { multipartFormData in
              multipartFormData.append(imgData, withName: "fileupload", fileName:"image", mimeType: "image/jpg")
              multipartFormData.append(keyData, withName: "key")
              multipartFormData.append(keyJSON, withName: "format")
          }, to: url, encodingCompletion: { encodingResult in
              switch encodingResult {
              case .success(let upload, _, _):
                  upload.responseJSON { response in
                      if let info = response.result.value as? [String: AnyObject],
                          let links = info["links"] as? [String: AnyObject],
                          let imgLink = links["image_link"] as? String {
                                  self.postToFirebase(imgLink)
                      }
                  }
              case.failure(_): break
              }
          })
      }
      

      注意,method 参数默认为 .post,因此您不必提供该参数。

      猜你喜欢
      • 2021-03-05
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多