2016-09-19 64 views
0

想用斯威夫特送这Alamofire ...Alamofire参数编码,字典词典中

curl -X POST https://content.dropboxapi.com/2/files/download  
--header "Authorization: Bearer ab-xxx-x-x"  
--header "Dropbox-API-Arg: {\"path\": "/acme101/acmeX100/acmeX100.001.png\"}" 

,但找不出如何获得第二--header你在这里看到到代码?尝试了几次不同的组合,但...

JSON: 114 bytes Optional("Error in call to API function \"files/download\": Must provide HTTP header \"Dropbox-API-Arg\" or URL parameter \"arg\".") 

我提供了它,但不正确显然?

let subPart: NSDictionary = ["path": sourcePath] 
let headers:HTTPHeaders = ["Authorization": "Bearer " + token2Save, "Dropbox-API-Arg": String(describing: subPart)] 

    Alamofire.request("https://content.dropboxapi.com/2/files/download", method: .post, encoding: JSONEncoding.init(options: []), headers: headers).responseData(completionHandler: {feedback in 
+0

'print(String(describe:subPart))',whats the output? –

+0

尝试'.JSON'而不是'JSONEncoding.init(选项:[])' –

+0

输出是“{= {/acme101/acmeX100/acmeX100.001.png”; }}这里看到的子部件.JSON不会编译为Alamofire选项。注意我正在使用Swift 3.0和Alamofire 4.0.0。 – user3069232

回答

0

Ureka !!感谢UB先生给我这些提示。找到解决方案。

let subPart: Dictionary = ["path":sourcePath] 
    do { 
     let data = try JSONSerialization.data(withJSONObject: subPart, options: []) 
     let dataString = String(data: data, encoding: .utf8) 
     headers = ["Authorization": "Bearer " + token2Save, "Dropbox-API-Arg": dataString!] 
    } catch { 
     print("crunch") 
    } 

Alamofire.request("https://content.dropboxapi.com/2/files/download", method: .post, encoding: JSONEncoding.init(options: []), headers: headers).responseData(completionHandler: {feedback in 
     guard feedback.result.value != nil else { 
     print("Error: did not receive data", print("request \(request) feedback \(feedback)")) 
     return 
     } 
     guard feedback.result.error == nil else { 
      print("error calling POST on list_folder") 
      print(feedback.result.error) 
      return 
     } 
     if let JSON = feedback.result.value { 
      print("JSON: \(JSON)") 
      let dataString = String(data: JSON, encoding: .utf8) 
      print("JSON: \(JSON) \(dataString)") 
     } 
     if let IMAGE = feedback.result.value { 
      sharedDataAccess.fnData(index2seek: 0, fnData: feedback.result.value! as Data) 
      NotificationCenter.default.post(name: Notification.Name("previewPane"), object: nil, userInfo: nil) 
     } 
    })