ios - 使用 Alamofire 将结构上传到服务器

标签 ios json swift http alamofire

我想使用 Alamofire 将图像 URL 上传到我的服务器。我有一个包含我的图像 URL 的结构和一个在框架上看起来像这样的 CGRect:

public struct TGImage {

    private(set) var url: String? 
    private(set) var crop: CGRect

    public init(url: String, crop: CGRect) {
        self.url = url
        self.crop = crop
    }
}

在我项目的 viewDidLoad() 中像这样:

let tgImageURL = TGImage(url: "http://media.gettyimages.com/photos/model-walks-the-runway-at-the-tory-burch-fw17-show-during-new-york-picture-id635259314", crop: CGRect(x: 0, y: 0, width: 499, height: 358))

我的服务器接受该结构并返回 json,但我不知道如何将它上传到服务器。这是我到目前为止在框架方面的功能:

public func detectBoxes(image: TGImage) {

    let user = "key_wcjRv0QAasd76W83tZHrIH1Y70U"
    let password = ""

    var headers: HTTPHeaders = ["Content-Type" : "application/json"]

    if let authorizationHeader = Request.authorizationHeader(user: user, password: password) {
        headers[authorizationHeader.key] = authorizationHeader.value
    }

    Alamofire.request("http://api-dev.websiteURL.co/v1/prediction/tag", headers: headers)
        .responseJSON { response in
            debugPrint(response)
    }
}

在项目方面:

tg.detectBoxes(image: tgImageURL)

最佳答案

您的客户端和服务器需要就一种共同的“语言”达成一致,通常是 JSON 或 XML,因此您需要将您的对象序列化为 JSON 或 XML。在您的代码中,它似乎应该是 JSON,因为您在 header 中指出内容类型是 JSON。 (而且没有人真正使用 xml 了)

您还需要同意(与服务器)服务器希望您使用哪种 http 方法(post 或 get),这将决定您将数据发送到哪里(post 方法 - 在正文或 get 方法 - 在标题上)

使用Alamofire's json-encoding文档以查看有关如何正确发送请求的示例和说明(使用 post)

无论如何,序列化你的结构并不是一件难事, 您可以通过 NSJSONSerialization 使用 Swift 的 build it JSON 序列化,这有点麻烦,或者使用像 SwiftyJSON 这样的开源库。

这里是一个如何使用NSJSONSerialization的例子

func Serialization(object: AnyObject)  -> String{
    do {
        let stringData = try NSJSONSerialization.dataWithJSONObject(object, options: [])
        if let string = String(data: stringData, encoding: NSUTF8StringEncoding){
            return string
        }
    }catch _ {

    }
    return "{\"element\":\"jsonError\"}"
}

关于ios - 使用 Alamofire 将结构上传到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45176930/

相关文章:

Android 和 iOS 设备硬件视角编程体验

如果在录音或通话期间状态栏增加,iOS 自定义键盘的框架会缩小 20 点?

带有 2 种不同 View 的 iOS 拖放

javascript - 将元素移动到数组中的第一个位置

c# - 在 C# 中从 JSON 对象获取对象值

objective-c - Swift 框架到 Objective-C 设备和模拟器架构

ios - 如何将来自 dataTaskWithUrl 的响应存储在其他变量中?

ios - 处理过时的API的正确方法

javascript - AWS Node.js JSON 输入错误

ios - AVSpeechUtterance 完成处理程序