2017-07-18 44 views
1

我想使用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) 
+0

1.哪种格式正在计划使用的struct发送到服务器的例子吗?您的请求的内容类型是JSON 2.我在detectBoxes中看不到任何图像 - 在我看来,您应该已将结构转换为JSON字符串,然后将其发送到服务器 –

+0

@ inspector_60我是否真的必须转换到JSON?我是否可能会上传url和代表“crop”变量(宽度,高度,x,y)的4个数字的数组?我真的在要求这个acutal功能。我将如何实现实际代码 –

+0

它取决于您的服务器实现,客户端和服务器需要达成共同的“语言”,通常是JSON或XML,因此您需要将对象序列化为JSON或XML。它看起来在你的代码中应该是JSON。 任何方式序列化你的结构是不难的任务,你可以使用它构建JSON序列化,这有点麻烦(在Swift 4上进行了改进),或者使用像SwiftyJSON这样的开源库[link](https://github.com/SwiftyJSON/SwiftyJSON) –

回答

1

您的客户端和服务器需要在一个共同的“语言”同意通常它是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\"}" 
} 
相关问题