2017-05-21 3 views
1

Je télécharge des images de façon anonyme à l'aide de l'API Imgur et d'Alamofire. Cependant, je ne reçois pas l'URL dans la réponse json. Voici mon code:Obtention d'une URL d'image après le téléchargement vers l'API Imgur à l'aide de Swift 3

static func post(image: UIImage, for username: String) { 

    let imageData = UIImagePNGRepresentation(image) 
    let base64Image = imageData?.base64EncodedString(options: .lineLength64Characters) 

    let url = "https://api.imgur.com/3/upload" 

    let parameters = [ 
     "image": base64Image 
    ] 

    Alamofire.upload(multipartFormData: { multipartFormData in 
     if let imageData = UIImageJPEGRepresentation(image, 1) { 
      multipartFormData.append(imageData, withName: username, fileName: "\(username).png", mimeType: "image/png") 
     } 

     for (key, value) in parameters { 
      multipartFormData.append((value?.data(using: .utf8))!, withName: key) 
     }}, to: url, method: .post, headers: ["Authorization": "Client-ID " + Constants.IMGUR_CLIENT_ID], 
      encodingCompletion: { encodingResult in 
       switch encodingResult { 
       case .success(let upload, _, _): 
        upload.response { response in 
         print(response) // url nowhere to be found 
        } 
       case .failure(let encodingError): 
        print("error:\(encodingError)") 
       } 
    }) 

} 

Voici la réponse imprimée:

enter image description here

+0

vérifiez ma réponse. –

Répondre

2

La question dans votre code est que vous imprimez seulement la response de la demande, vous avez réellement besoin d'analyser que dans JSON et de vérifier la réponse de votre demande, il contient l'URL de l'image que vous venez de télécharger. Voici comment vous devriez analyser le response et obtenir l'URL de l'image.

static func post(image: UIImage, for username: String) { 

    let imageData = UIImagePNGRepresentation(image) 
    let base64Image = imageData?.base64EncodedString(options: .lineLength64Characters) 

    let url = "https://api.imgur.com/3/upload" 

    let parameters = [ 
     "image": base64Image 
    ] 

    Alamofire.upload(multipartFormData: { multipartFormData in 
     if let imageData = UIImageJPEGRepresentation(image, 1) { 
      multipartFormData.append(imageData, withName: username, fileName: "\(username).png", mimeType: "image/png") 
     } 

     for (key, value) in parameters { 
      multipartFormData.append((value?.data(using: .utf8))!, withName: key) 
     }}, to: url, method: .post, headers: ["Authorization": "Client-ID " + Constants.IMGUR_CLIENT_ID], 
      encodingCompletion: { encodingResult in 
       switch encodingResult { 
       case .success(let upload, _, _): 
        upload.response { response in 
         //This is what you have been missing 
         let json = try? JSONSerialization.jsonObject(with: response.data!, options: .allowFragments) as! [String:Any] 
         print(json) 
         let imageDic = json?["data"] as? [String:Any] 
         print(imageDic?["link"]) 
        } 
       case .failure(let encodingError): 
        print("error:\(encodingError)") 
       } 
    }) 

}