【问题标题】:Flickr photo upload does not work with OAtuth1Swift postImage MethodFlickr 照片上传不适用于 OAtuth1Swift postImage 方法
【发布时间】:2020-01-03 17:38:43
【问题描述】:

我目前面临的问题是,在 OAuth1 过程之后,当我真正想要发送图像时,flickrapi 响应:没有指定照片。 :

<?xml version="1.0" encoding="utf-8" ?> <rsp stat="fail"> <err code="2" msg="No photo specified" /> </rsp>

我在 XCode 10、Swift 4 上使用 OAtuthSwift Framework for ios 来完成这项任务。

oAuthSwift = OAuth1Swift(consumerKey: flickr.apiKey,
                        consumerSecret: flickr.apiSecret,
                        requestTokenUrl: "https://www.flickr.com/services/oauth/request_token",
                        authorizeUrl: "https://www.flickr.com/services/oauth/authorize",
                        accessTokenUrl: "https://www.flickr.com/services/oauth/access_token")

if oAuthSwift != nil {
   oAuthSwift?.authorizeURLHandler = SafariURLHandler(viewController: self, oauthSwift: oAuthSwift!)

   guard let rwURL = URL(string: "iflickr://oauth-callback/iflickr") else {
       return
   }
   let handle = oAuthSwift!.authorize( withCallbackURL: rwURL) { [unowned self] result in
       switch result {
       case .success(let (credential, response, parameters)):
           print(credential.oauthToken)
           print(credential.oauthTokenSecret)

           guard let img = self.image?.jpegData(compressionQuality: 0.0) else {
               print ("cant convert image")
               return
           }
           var params = parameters

// Until Here seems everything fine

           self.oAuthSwift!.client.postImage(flickr.uploadEndpoint, parameters: params, image: img) { upResult in
               switch upResult {
               case .failure(let error):
                   print (error)
               case .success(let response):
                   let respData = response.data
                   if let string = response.string {
                       print ("\nRESULT:\n      - \(string)\n")
                      // Here it prints the above described `No Photo Specified`
                   }
               }
           }
       case .failure(let error):
           print(error.localizedDescription)
       }
   }
}

我也尝试自己执行请求,并仅获取 OAuth 流程(参数)提供的 Dictionary 值,但随后显示类似:未提供令牌。 有人可以帮忙吗?

【问题讨论】:

    标签: swift oauth flickr photo-upload


    【解决方案1】:

    就像@Clemens Brockschmidt 提到的,图像参数不正确。 OAuthSwift 提供了标准的“媒体”作为参数名称,flickr 上传 API 不接受该名称。

    认识到这一点后,我将参数名称从“media”更改为“photo”。 代码在 OAuthSwift/Sources/OAuthSwiftClient.swift:multiPartRequest(),第 125 行 https://github.com/OAuthSwift/OAuthSwift/blob/b8941a23d1584ba17426c312bb957de355341f4a/Sources/OAuthSwiftClient.swift#L125

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多