2017-08-03 9 views
0

私は何の認証もなしに公開ウェブサーバーからJPGファイルを取得しようとしています。私は403エラーを取得しています https://drscdn.500px.org/photo/36406120/m%3D900_k%3D1_a%3D1/v2?client_application_id=29771&webp=true&sig=97ac488f1336f41d9f3e4a67e6bf99b3bd1aadfb6c9631a6097ff5b4a729a94eAlamoFire 4.XのURLエンコーディング

 let url = URL(string: urlString) 
     let myParameters: [String : AnyObject] = ["myImage": image, "myBlurredImage": blurredImage, "index": index as AnyObject] 
     let croppedSize = CGSize(width: self.scrollViewWidth!, height: self.scrollViewHeight!) 
     self.apicounterPerRequest += 1 


     Alamofire.request(url!, method: .get, parameters: myParameters, encoding: URLEncoding.default) 
      .validate() 
      .response { response in 
       let myImage = myParameters["myImage"] as! UIImageView 
       let myBlurredImage = myParameters["myBlurredImage"] as! UIImageView 
       let index = myParameters["index"] as! Int 
       if let downloadedImage = UIImage(data: response.data!) { 
        myImage.image = downloadedImage 
        self.displayed500PxPhoto[index].uiimage = downloadedImage 
        myBlurredImage.image = PhotoManager.imageWithSize(downloadedImage, size: croppedSize) 
        completion({ 
         print("Done Downloading") 
        }) 

       } else { 
        print("Error : \(response.data)") 
       } 

       if response.error != nil { 
        print(response.error!) 
        self.showAlert("One or more photos could not be downloaded. Please try again.") 
        completion({ 
         throw response.error! 
        }) 
       } 
     } 

Error : Optional(409 bytes) 
responseValidationFailed(Alamofire.AFError.ResponseValidationFailureReason.unacceptableStatusCode(403)) 

私がそこにあるかなり確信してコーディングをurlStringが値を以下ましたAlamoFire 4.4

とスウィフト3で行われます上に掲載されたURLの予約文字にエンコード問題がありますが、AlamoFireにエンコード方法を正しく伝える方法をまだ理解できませんでした。どんな手がかりも高く評価されています。ご協力ありがとうございました。

+0

場合(名前を指定したくない場合に使用)返されるパラメータを意味し、私はあなたが使用している気づく - エンコーディングを:URLEncoding.defaultあなたは、クエリ文字列にパラメータを渡していることを意味します。入力したクエリ文字列にパラメータを手動で追加し、その結果を確認できますか? –

答えて

0

それを簡単にしてください。これらはあなたを助けるためにいくつかのヒントがあります:

  • デフォルトの方法はgetので、あなたがそれを渡す必要はありませんです。 (私はあなたがUIImageViewを渡したいとは思わないので)

  • パラメータは["myImage": image]を保存し、再び戻ってそれを取得することにより、余分な不要な作業を追加しないでください空に

  • が必要になる場合があります。
  • Alamofireは、応答はそうここ

が私の作業のサンプルであるresponseData機能を使用したデータであるParameters = [String: Any]

  • を受け入れるため、インデックスのAnyObjectに不要なキャストをしないでください:

    func testingImage(_ completion: @escaping ((UIImage?) -> Swift.Void)) { 
        let urlString = "https://drscdn.500px.org/photo/36406120/m%3D900_k%3D1_a%3D1/v2?client_application_id=29771&webp=true&sig=97ac488f1336f41d9f3e4a67e6bf99b3bd1aadfb6c9631a6097ff5b4a729a94e" 
    
        guard let url = URL(string: urlString) else { return completion(nil) } 
    
        Alamofire.request(url).validate().responseData { 
         guard let data = $0.data else { return completion(nil) } 
         guard let image = UIImage(data: data) else { return completion(nil) } 
    
         completion(image) 
        } 
    } 
    

    とあなたこのように呼び出すことができます

    testingImage() { self.imageView.image = $0 } 
    

    $0代わりresponse in

  • +0

    ありがとうございました。魅力のように働く。 –

    +0

    @JessicaMeckmannなぜあなたはその答えを受け入れなかったのですか? – zombie

    +0

    私はそれをすることができないことを理解していなかったので、....すみません。今やりました。あなたの助けをありがとう、素晴らしい週末をありがとう。 –

    関連する問題