首页 > 解决方案 > Dropbox HTTP 端点挂起并抛出超时

问题描述

我尝试在身份验证后通过 Dropbox HTTP API 上传图像,使用原生 iOS 功能和方法(不能使用 ALAMOFIRE)。当我发送请求时,它会在 30 秒后给我一个超时。

...使用的代码:

let data = UIImagePNGRepresentation(self.image!)
var request = URLRequest.init(url: url)

request.allHTTPHeaderFields = [
  "Authorization":"Bearer <TOKEN_HERE>",
  "Dropbox-API-Arg":"{\"path\": \"/TCC/uploaded.png\",\"mode\": \"add\",\"autorename\": false,\"mute\": false}",
  "Content-Type": "application/octet-stream",
]

  URLSession.shared.uploadTask(with: request,
                             from: data) { returnData, response, error in
  guard
    let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200
    else {
      if let callback = failure {
        callback()
      }
      return
  }
  //UI updates in main thread
  DispatchQueue.main.async() {
    if success != nil {
      success!()
    }

  }
  }.resume()

标签: iosswiftdropbox

解决方案


你好@Danilo Rodrigues,

缺少一条语句,需要显式声明使用的方法:

let data = UIImagePNGRepresentation(self.image!)
var request = URLRequest.init(url: url)

request.allHTTPHeaderFields = [
  "Authorization":"Bearer <TOKEN_HERE>",
  "Dropbox-API-Arg":"{\"path\": \"/TCC/uploaded.png\",\"mode\": \"add\",\"autorename\": false,\"mute\": false}",
  "Content-Type": "application/octet-stream",
]
request.httpMethod = "POST" //ADDED THIS LINE
  URLSession.shared.uploadTask(with: request,
                             from: data) { returnData, response, error in
  guard
    let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200
    else {
      if let callback = failure {
        callback()
      }
      return
  }
  //UI updates in main thread
  DispatchQueue.main.async() {
    if success != nil {
      success!()
    }

  }
  }.resume()

推荐阅读