【问题标题】:Getting image URL after uploading to Imgur API using Swift 3使用 Swift 3 上传到 Imgur API 后获取图像 URL
【发布时间】:2017-10-21 08:52:43
【问题描述】:

我正在使用 Imgur API 和 Alamofire 匿名上传图片。但是,我没有在响应 json 中获取 url。这是我的代码:

    static func post(image: UIImage, for username: String) {

    let imageData = UIImagePNGRepresentation(image)
    let base64Image = imageData?.base64EncodedString(options: .lineLength64Characters)

    let url = "https://api.imgur.com/3/upload"

    let parameters = [
        "image": base64Image
    ]

    Alamofire.upload(multipartFormData: { multipartFormData in
        if let imageData = UIImageJPEGRepresentation(image, 1) {
            multipartFormData.append(imageData, withName: username, fileName: "\(username).png", mimeType: "image/png")
        }

        for (key, value) in parameters {
            multipartFormData.append((value?.data(using: .utf8))!, withName: key)
        }}, to: url, method: .post, headers: ["Authorization": "Client-ID " + Constants.IMGUR_CLIENT_ID],
            encodingCompletion: { encodingResult in
                switch encodingResult {
                case .success(let upload, _, _):
                    upload.response { response in
                        print(response) // url nowhere to be found
                    }
                case .failure(let encodingError):
                    print("error:\(encodingError)")
                }
    })

}

这是打印出来的回复:

【问题讨论】:

  • 检查我的答案。

标签: ios swift3 upload alamofire imgur


【解决方案1】:

您的代码中的问题是您只是打印请求的response,您实际上需要将其解析为JSON,然后检查您的请求的响应,它确实包含您刚刚上传的图片网址. 这就是您应该如何解析 response 并获取图像 url。

static func post(image: UIImage, for username: String) {

    let imageData = UIImagePNGRepresentation(image)
    let base64Image = imageData?.base64EncodedString(options: .lineLength64Characters)

    let url = "https://api.imgur.com/3/upload"

    let parameters = [
        "image": base64Image
    ]

    Alamofire.upload(multipartFormData: { multipartFormData in
        if let imageData = UIImageJPEGRepresentation(image, 1) {
            multipartFormData.append(imageData, withName: username, fileName: "\(username).png", mimeType: "image/png")
        }

        for (key, value) in parameters {
            multipartFormData.append((value?.data(using: .utf8))!, withName: key)
        }}, to: url, method: .post, headers: ["Authorization": "Client-ID " + Constants.IMGUR_CLIENT_ID],
            encodingCompletion: { encodingResult in
                switch encodingResult {
                case .success(let upload, _, _):
                    upload.response { response in
                        //This is what you have been missing
                         let json = try? JSONSerialization.jsonObject(with: response.data!, options: .allowFragments) as! [String:Any]
                         print(json)
                         let imageDic = json?["data"] as? [String:Any]
                         print(imageDic?["link"])
                    }
                case .failure(let encodingError):
                    print("error:\(encodingError)")
                }
    })

}

【讨论】:

    猜你喜欢
    • 2017-10-09
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    相关资源
    最近更新 更多