我正在尝试从公共网络服务器获取JPG文件,而无需任何类型的身份验证。编码是在 Swift 3 中使用 AlamoFire 4.4 完成
的。urlString 具有以下值: https://drscdn.500px.org/photo/36406120/m%3D900_k%3D1_a%3D1/v2?client_application_id=29771&webp=true&sig=97ac488f1336f41d9f3e4a67e6bf99b3bd1aadfb6c9631a6097ff5b4a729a94e
let url = URL(string: urlString)
let myParameters: [String : AnyObject] = ["myImage": image, "myBlurredImage": blurredImage, "index": index as AnyObject]
let croppedSize = CGSize(width: self.scrollViewWidth!, height: self.scrollViewHeight!)
self.apicounterPerRequest += 1
Alamofire.request(url!, method: .get, parameters: myParameters, encoding: URLEncoding.default)
.validate()
.response { response in
let myImage = myParameters["myImage"] as! UIImageView
let myBlurredImage = myParameters["myBlurredImage"] as! UIImageView
let index = myParameters["index"] as! Int
if let downloadedImage = UIImage(data: response.data!) {
myImage.image = downloadedImage
self.displayed500PxPhoto[index].uiimage = downloadedImage
myBlurredImage.image = PhotoManager.imageWithSize(downloadedImage, size: croppedSize)
completion({
print("Done Downloading")
})
} else {
print("Error : (response.data)")
}
if response.error != nil {
print(response.error!)
self.showAlert("One or more photos could not be downloaded. Please try again.")
completion({
throw response.error!
})
}
}
我收到 403 错误:
Error : Optional(409 bytes)
responseValidationFailed(Alamofire.AFError.ResponseValidationFailureReason.unacceptableStatusCode(403))
我很确定上面发布的 URL 中的保留字符存在编码问题,但还无法弄清楚如何正确告诉 AlamoFire 如何编码它。任何线索都受到高度赞赏。谢谢你的帮助。
请让它变得简单
以下是一些可以帮助您的提示:
-
默认方法是
get
,因此无需传递它。 -
参数可能需要为空(因为我认为您不想传递 UIImageView(
- 不要通过存储
["myImage": image]
然后再次取回来添加额外的不需要的工作。 - 不要进行不必要的强制转换来
AnyObject
索引,因为Alamofire
接受Parameters = [String: Any]
- 响应是数据,因此请使用
responseData
函数
这是我的工作示例:
func testingImage(_ completion: @escaping ((UIImage?) -> Swift.Void)) {
let urlString = "https://drscdn.500px.org/photo/36406120/m%3D900_k%3D1_a%3D1/v2?client_application_id=29771&webp=true&sig=97ac488f1336f41d9f3e4a67e6bf99b3bd1aadfb6c9631a6097ff5b4a729a94e"
guard let url = URL(string: urlString) else { return completion(nil) }
Alamofire.request(url).validate().responseData {
guard let data = $0.data else { return completion(nil) }
guard let image = UIImage(data: data) else { return completion(nil) }
completion(image)
}
}
你可以这样称呼它
testingImage() { self.imageView.image = $0 }
$0
表示返回的参数(如果不想指定名称,则使用(,如果response in