将结构上载到服务器使用Alamofire
问题描述:
我想使用Alamofire将图像URL上载到我的服务器。我有一个对我的图片网址结构和看起来像这样的框架的CGRect:将结构上载到服务器使用Alamofire
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,因为您在标头中指出内容类型为JSON。 (并没有人真的使用xml了)
您还需要同意(与服务器)哪个http方法(发布或获取)服务器期望您使用此将决定您将在哪里发送数据(post
方法 - 在身体或get
方法 - 在头)
使用Alamofire's json-encoding文档,看看例子以及如何正确地将请求发送指令(使用post
)
任何方式,序列化你的结构是不是难事, 您可以使用Swift的构建JSON序列化与NSJSONSerialization
这是有点繁琐我还是使用像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\"}"
}
1.哪种格式正在计划使用的struct发送到服务器的例子吗?您的请求的内容类型是JSON 2.我在detectBoxes中看不到任何图像 - 在我看来,您应该已将结构转换为JSON字符串,然后将其发送到服务器 –
@ inspector_60我是否真的必须转换到JSON?我是否可能会上传url和代表“crop”变量(宽度,高度,x,y)的4个数字的数组?我真的在要求这个acutal功能。我将如何实现实际代码 –
它取决于您的服务器实现,客户端和服务器需要达成共同的“语言”,通常是JSON或XML,因此您需要将对象序列化为JSON或XML。它看起来在你的代码中应该是JSON。 任何方式序列化你的结构是不难的任务,你可以使用它构建JSON序列化,这有点麻烦(在Swift 4上进行了改进),或者使用像SwiftyJSON这样的开源库[link](https://github.com/SwiftyJSON/SwiftyJSON) –