大佬教程收集整理的这篇文章主要介绍了swift – 如何URI编码图像?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@L_616_1@
他们说图像必须是URI编码的…究竟是什么意思?
这是否意味着将图像转换为base64字符串,然后将其传递给请求?
我试过了,但收到了http 414错误 – 请求URI太大了.
这是我的代码,其中提出了请求:
@IBACtion func analyzeImage(sender: UIButton) { var imageData = UIImagePNGRepresentation(mainImage.imagE) let base64ImageString = imageData.base64EncodedStringWithOptions(.allZeros) let requestString = ENDPOINT+"?apikey="+API_KEY+"&image="+base64ImageString+"&outputMode=json" let url = NSURL(String: requestString) let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data,response,error) in println(NSString(data: data,encoding: NSUTF8StringEncoding)) } task.resume() }
编辑:我考虑到Dijkgraaf建议使用POST请求而不是GET来解决URI长度问题.我正在使用Alamofire库来做到这一点.这是我的代码:
@IBACtion func analyzeImage(sender: UIButton) { var imageData = UIImagePNGRepresentation(mainImage.imagE) let base64ImageString = imageData.base64EncodedStringWithOptions(.allZeros) let params = [ "apikey" : API_KEY,"image" : base64ImageString,"outputMode" : "json"] var manager = Manager.sharedInstance //Passing all the headers you want! manager.session.configuration.httpAdditionalHeaders = [ "Content-Type": "application/x-www-form-urlencoded" ] manager.request(.POST,ENDPOINT,parameters:params,encoding: .URL) .response { (request,data,error) in println(request) println(responsE) println(error) } }
但是,当我尝试这个时,我得到一个“无法分析:下游问题”的错误.
这是控制台输出:
<NSMutableURLrequest: 0x1742040c0> { URL: http://access.alchemyapi.com/calls/image/ImageGetRankedImageKeywords } Optional(<NShttpURLResponse: 0x17082c1e0> { URL: http://access.alchemyapi.com/calls/image/ImageGetRankedImageKeywords } { status code: 200,headers { "Access-Control-Allow-Origin" = "*"; "Cache-Control" = "no-cache"; Connection = "keep-alive"; "Content-Length" = 326; "Content-Type" = "application/json"; Date = "Mon,08 Jun 2015 05:59:22 GMT"; Server = Nginx; "X-AlchemyAPI-CurrentVersion" = "12.15"; "X-AlchemyAPI-Error-Msg" = "cAnnot-analyze:downstream-issue"; "X-AlchemyAPI-Key" = [API KEY HIDDEN]; "X-AlchemyAPI-Params" = "sentiment=0&kNowledgeGraph=0&detectedLanguage=unkNown&submitLanguage=detect"; "X-AlchemyAPI-Status" = ERROR; "X-AlchemyAPI-@R_562_10586@l-transactions" = 0; } }) nil
不知道出了什么问题,但Alchemy文档确实说明POST请求应该将“Content-Type”标题设置为“application / x-www-form-urlencoded”,这似乎不会发生,无论什么我试着设定.这可能是问题吗?
编辑:我再次尝试POST原始图像数据,Dijkgraaf建议:
@IBACtion func analyzeImage(sender: UIButton) { var imageData = UIImagePNGRepresentation(mainImage.imagE) //let base64ImageString = imageData.base64EncodedStringWithOptions(.allZeros) var request = httpTask() request.requestserializer = httprequestserializer() request.requestserializer.headers["Content-Type"] = "application/x-www-form-urlencoded" let params: Dictionary<String,AnyObject> = [ "apikey" : API_KEY,"imagePostMode" : "raw","image" : imageData,"outputMode" : "json"] request.POST(ENDPOINT,parameters: params,completionHandler: {(response: httpResponsE) in println(response.headers) }) }
但我仍然得到相同的不能 – 再次分析下游问题错误.
以上是大佬教程为你收集整理的swift – 如何URI编码图像?全部内容,希望文章能够帮你解决swift – 如何URI编码图像?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。