ios - 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()
解决方案
你好@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()
推荐阅读
- java - java `wait()` 等待是如何实现的?
- typescript - 如何使用 Typescript 和 gulp 从多个文件生成单个文件?
- java - 使用 Spring Boot 应用程序在运行时编译类
- r - 在 R 中设置默认值
- javascript - 如何使用 ajax 请求刷新地图?
- javascript - 无法将输入字段中的裁剪图像设置为文件
- ibm-mobilefirst - 使用 UserAuthenticationSecurityCheck 时,IBM MFP 8.0 多个用户 ID 粘在 1 个设备上
- algorithm - 在幺半群的帮助下将二次时间程序变成线性时间程序?
- spring - 在应用程序启动之前运行自定义代码的不同方法
- material-ui - 素材ui头像显示本地图片坏了