使用Alamofire将struct上传到服务器

时间:2017-07-18 20:57:44

标签: ios json swift http alamofire

我想使用Alamofire将图片网址上传到我的服务器。我有一个结构来保存我的图像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)

1 个答案:

答案 0 :(得分:1)

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

您还需要(与服务器)同意服务器希望您使用哪种http方法(发布或获取),这将决定您将在哪个位置发送数据(Msg 40515, Level 15, State 1, Line 16 Reference to database and/or server name in 'DatabaseB.dbo.TableB ' is not supported in this version of SQL Server. 方法 - 或{{1} }方法 - 在标题上)

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

无论如何,序列化你的结构并不困难, 您可以使用Swift使用get构建JSON序列化,这有点麻烦或使用像SwiftyJSON这样的开源库

以下是如何使用post

的示例
NSJSONSerialization