我想使用 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/