2017-05-21 11 views
1

Imgur APIとAlamofireを使用して画像を匿名でアップロードしています。しかし、私は応答jsonでURLを取得していません。ここに私のコードは次のとおりです。ここでSwgift 3を使用してImgur APIにアップロードした後に画像URLを取得する

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

} 

は印刷応答である:

enter image description here

+0

私の答えをチェックしてください。 –

答えて

2

あなたのコードで問題があなただけのリクエストのresponseを印刷しているということです、あなたが実際にそれを解析する必要がありますJSONに入り、リクエストの返信を確認するよりも、アップロードした画像URLが含まれています。 これは、responseを解析してイメージのURLを取得する方法です。

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

} 
関連する問題