如何使用Alamofire上传MultipartFormData进行身份validation

如何使用Alamofire上传MultipartFormData进行身份validation? 我不明白的地方是放置.authenticate(user: username, password: password). ? 这是我通常如何使用MultipartFormData上传图片:

 Alamofire.upload( .POST, "https://myExampleUrl/photo/upload", headers: headers, multipartFormData: { multipartFormData in multipartFormData.appendBodyPart(data: "default".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"_formname") multipartFormData.appendBodyPart(fileURL: fileUrl, name: "photo") }, encodingCompletion: { encodingResult in switch encodingResult { case .Success(let upload, _, _): upload.responseString { response in debugPrint(response) } case .Failure(let encodingError): print(encodingError) } } ) 

我认为可以将身份validation过程添加到头文件中?

没有太多时间去探索rilbits.com的API。 当我访问Safari中的地址时,出现以下错误:

 Please add 'Authorization' or 'X-Access-Token' header to your request 

这为您提供了两个选项:

  1. 首先login并获取一个访问令牌,然后您可以使用该令牌上传请求
  2. 发送一个基本的Authorization标题以及上传请求。

以下是如何发送Authorization标题(第二个选项):

 let username = "username" let password = "password" let credentialData = "\(username):\(password)".dataUsingEncoding(NSUTF8StringEncoding)! let base64Credentials = credentialData.base64EncodedStringWithOptions([]) let headers = ["Authorization": base64Credentials] Alamofire.upload( .POST, "https://rilbits.com/supersafe/photo/upload", headers: headers, multipartFormData: { multipartFormData in let data = "default".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)! multipartFormData.appendBodyPart(data: data, name: "_formname") multipartFormData.appendBodyPart(fileURL: fileURL, name: "photo") }, encodingCompletion: { encodingResult in switch encodingResult { case .Success(let upload, _, _): upload.responseString { response in debugPrint(response) } case .Failure(let encodingError): print(encodingError) } } ) 

全面披露:

  • 授权码从Alamofire的自述文件中解除
  • 我没有testing上面的代码

Alamofire.upload并不真正上传到这里:它只将多部分请求写入文件。

当您在encodingCompletion上调用upload .responseX时, 就是实际执行请求的时间。 那是,

 upload.authenticate(user: username, password: password) .responseString { ...} 

应该做你想做的。

如果您使用标头进行身份validation,则应设置Alamofire.uploadheaders参数仍然Alamofire.upload ; 据我所知,它应该转发标题upload 。 您可以validation通过转储upload到控制台,您还可以设置标题upload正常的请求。