0

我正在使用 Alamofire 尝试使用image shack API将图像放在 image shack 服务器上。我没有收到回复并收到错误消息:

失败:错误域 = NSCocoaErrorDomain 代码 = 3840 “字符 0 周围的值无效。

我还在代码中突出显示了错误所指的位置:

        let imageName = "pano.jpg"
        let postImage = UIImage(named: imageName)
        let urlStr = "https://post.imageshack.us/upload_api.php"
        let theUrl:NSString = urlStr.stringByRemovingPercentEncoding!
        let url = NSURL(string: theUrl as String)!
        let imgData = UIImageJPEGRepresentation(postImage!, 0.2)!
        let keyData = "0345CHKMad115dd32980b363be5f2d34731b8110".dataUsingEncoding(NSUTF8StringEncoding)!
        let keyJSON = "json".dataUsingEncoding(NSUTF8StringEncoding)!


Alamofire.upload(.POST, url, multipartFormData: { MultipartFormData in

                MultipartFormData.appendBodyPart(data: imgData, name: "fileupload", mimeType: "image/jpg")
                MultipartFormData.appendBodyPart(data: keyData, name: "key")
                MultipartFormData.appendBodyPart(data: keyJSON, name: "format")

            }) {encodingResult in

                switch encodingResult {
                case .Success(let upload, _, _):
                    upload.responseJSON(completionHandler: { response in

                        print(response) //ERROR HERE
                        guard let data = response.result.value
                            else{
                                print("Request failed with error data)")

                            return
                        }

                        if let info = data as? Dictionary<String, AnyObject> {
                            if let links = info["links"] as? Dictionary<String, AnyObject> {
                                if let imgLink = links["image_link"] as? String {
                                    print(imgLink)
                                }
                            }
                        }
                    })

我完全失去了这个问题的意义,任何帮助都会很棒。

4

2 回答 2

0
   switch encodingResult {
                    case .Success(let upload, _,_):
                        upload.responseJSON(completionHandler: {response in

                            if let data = response.result.value as? Dictionary<String, AnyObject>{

                                if let links = data["links"] as? Dictionary<String, AnyObject> {
                                    if let imgLink = links["image_link"] as? String {
                                        print(imgLink)
                                    }
                                }
                            }


                        })
                    case .Failure(let error):
                        print(error)
                    }
于 2016-09-12T03:59:19.443 回答
0

试试这个,在将你传递给url函数之前:

//Convert the NSURL to a NSString
let urlString:NSString = url.absoluteString() as! NSString

//Remove Percent Encoding
let theUrl:NSString = urlString.stringByRemovingPercentEncoding()

//Place Back into NSURL
let newUrl = NSURL(string:theUrl)

并通过newUrl而不是url. 最好在实例化 original 之前执行此操作url,但请尝试这样做,看看是否有帮助。

编辑

在遇到问题的地方也试试这个:

var jsonError:NSError?
let json = NSJSONSerialization.JSONObjectWithData(response, options: nil, error: &jsonError) as NSDictionary {

    print(json)
}
于 2016-06-21T19:26:27.283 回答