如何通过Swift 4中的POST请求发送图像?

时间:2018-02-08 03:13:46

标签: ios swift https swift4 flask-restful

func createPost(username: String, user_id: String, description: String, image: UIImage, completion: @escaping (Bool) -> ()) {
    var request = URLRequest(url: URL(string: Globals.root+"/amazing/image/post/here")!)
    request.httpMethod = "POST"
    //request.httpBody = .data(using: .utf8)
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {
            print("statusCode should be 200, but is \(httpStatus.statusCode)")
            print("response = \(String(describing: response))")
        }
        if let data = data {
            do {
                let aaData = try JSONSerialization.jsonObject(with: data, options: [])
                if let ppData = aaData as? [String:Any] {
                    let u = ppData["username"] as! Bool
                    if u == true {
                        completion(true)
                    }
                }
            } catch let error as NSError {
                print(error.localizedDescription)
                completion(false)
            }
        }
    }
    task.resume()
}

我一直在搜索和搜索有效的答案,但我没有发现任何与Swift 4相关的内容。我希望能够将图像发送到我的RESTful API而无需对其进行编码。怎么能这样做?提前致谢。 :)

1 个答案:

答案 0 :(得分:1)

首先,鉴于您要发送用户名,以及图片的内容,它必须是多部分表单(或一些丑陋的BASE64编码的JSON属性)。

通常来说,干净的方法是首先通过二元体帖上传图片(因为图像是转移中唯一的东西,也是更快),获取Id并将其作为字段引用。

如果做不到这一点,那么使用Moya + AlamoFire会怎么样?

https://github.com/Moya/Moya/issues/598

图像是二进制对象,这是无效的HTTP,除非您通过多部分表单对其进行编码或将其包装为JSON安全Base-64(假设您使用的是JSON)