【问题标题】:How to get progress of uploading base64 image in Alamofire?如何获得在 Alamofire 中上传 base64 图像的进度?
【发布时间】:2019-03-13 21:24:45
【问题描述】:

有没有办法在 alamofire 中发布带有进度的 JSON?我需要做什么我有 JSON,它有 base64 图像字符串和一些其他参数,同时请求 JSON 我需要向最终用户显示进度,所以任何人都知道如何在 Alamofire 中做到这一点?

我点击了下面的链接,但它在 Alamofire 中给我一个语法错误?

Alamofire POST request with progress

    let parameters: [String: AnyObject] = ["key": "value" as AnyObject]
    let mutableURLRequest = NSMutableURLRequest(url: URL(string: "url goes here")!)
    mutableURLRequest.httpMethod = "POST"

    let encodedURLRequest = try! Alamofire.URLEncoding.default.encode(mutableURLRequest as! URLRequestConvertible, with: parameters)
    let data = encodedURLRequest.httpBody!

    Alamofire.upload(mutableURLRequest, data)
        .progress { _, totalBytesRead, totalBytesExpectedToRead in
            print("ENTER .PROGRESSS")
            print("\(totalBytesRead) of \(totalBytesExpectedToRead)")
        }
        .responseJSON { _, _, mydata, _ in
            print(mydata)
    }

它给了我以下错误

无法使用类型为 '(NSMutableURLRequet, Data) 的参数列表调用 'upload'

【问题讨论】:

  • 你遇到什么样的语法错误?
  • @andin 我已经编辑了问题

标签: swift alamofire


【解决方案1】:

正如您所指出的,您可以使用 Alamofire 上传文件或图像而无需将其转换为 Base64 ,使用 MultipartFormData 并跟踪进度。 如果有任何语法错误,您可以告诉我们更多信息或返回文档。

【讨论】:

  • 感谢@mohammad,但我没有上传文件,我正在上传图片的base64,所以我必须这样做,API 只接受base64 字符串而不是图片
【解决方案2】:

如果你想显示进度,你可以使用下面的代码:

 let binaryImageData = base64EncodeImage(image)
 SVProgressHUD.show() //use any progress hud
  let parameters : [String:Any] = [
            "Name" : "UserProfilePhoto",
            "Body": binaryImageData,
            "parentId": userId

   ]
   let header = ["content-type" : "application/json", "Authorization": "your token here"]
   var imageURL: URL {
            return URL(string: "Your UrlString here")
        }
   Alamofire.request(imageURL, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: header).responseJSON {
            response in

            if (response.result.isSuccess){
                SVProgressHUD.dismiss()
                let result = response.result.value as? NSDictionary
            }
            else{
                SVProgressHUD.dismiss()
            }
        }
    }

【讨论】:

  • 不要在 Swift 中使用 NSDictionary
  • 这是一个例子。就我而言,它是字典。
  • 谢谢,但我需要显示进度,它定义了剩余的进度。
猜你喜欢
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多