2016-06-21 17 views
0

私はAlamofireを使用して、image shack APIを使用して画像シャックサーバーに画像を配置しようとしています。この問題は、任意の助けを意味するものresponseJSON応答が得られません

 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) 
           } 
          } 
         } 
        }) 

私は完全に失われています:私は、応答を取り戻すとエラーが出るわけではない:

FAILURE: Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0.

エラーは、コードにあまり言及された場合、私が強調しているが素晴らしいことだ。

+0

をエラーメッセージは、単にそれが有効なJSONではないことが明らかになりました。 – vadian

+0

ありがとう、 'responseJSON'を 'responseString'に変更した場合、私は戻ってくる:申し訳ありませんが、予期せぬデータが受信されたことを検出しました。必要なパラメータ 'fileupload'が不足しているか、投稿がマルチパート/フォームデータではありません助けてもらえますか?なぜ私はこのことが分かりません –

+0

私はAlamofireに全く慣れていない、私はちょうどエラーメッセージを解釈していた。私はそれが実際にサーバーが返すものに依存すると思います。 – vadian

答えて

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を渡します。元のurlのインスタンス化の前にこれを行う方が良いでしょうが、それが役立つかどうか確認してみてください。あなたが問題を抱えているところ

EDIT

もこれを試してみてください。

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

    print(json) 
} 
+0

エラーが発生しましたが、ありがとうございます:タイプ 'NSURL'の値にメンバーがありません 'stringByRemovingPercentEncoding –

+0

文字列にそのメソッドがあります –

+0

ありがとうございます、このメソッドはありますが、同じ問題とエラー、何か他にありますか?私もコードを更新しました –

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) 
        } 
+0

この方法を試してください。それは私のために働いた – champ

関連する問題