如何使用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
这为您提供了两个选项:
- 首先login并获取一个访问令牌,然后您可以使用该令牌上传请求
- 发送一个基本的
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.upload
的headers
参数仍然Alamofire.upload
; 据我所知,它应该转发标题upload
。 您可以validation通过转储upload
到控制台,您还可以设置标题upload
正常的请求。