我正在尝试获取放置在远程服务器中的图像的Ko大小,并检查是否需要下载该图像。 我尝试了很多在此论坛中找到的示例,但对于Xcode 8和Swift 4而言,它们对我没有任何帮助。 首先,我尝试获得像这样的标题:
func getHeader() {
for (index, item) in imgUrlArray.enumerated() {
let session = URLSession.shared
session.dataTask(with: item) {
(data, response, error)->Void in
if let responseData = data {
do {
let json = try
JSONSerialization.jsonObject(with: responseData,
options: JSONSerialization.ReadingOptions.allowFragments)
print(json)
} catch {
print("Could not serialize")
}
}
}.resume()
}
}
imgUrlArray
是一个带有远程URL的数组,例如:http://www.test.com/image.jpg
在这种情况下,数据为零。我的错误在哪里?
答案 0 :(得分:1)
经过几天的搜索,我找到了该解决方案:
func getHeaderInformations (myUrl: URL, completion: @escaping (_ content: String?) -> ()) {
var request = URLRequest(url: myUrl)
request.httpMethod = "HEAD"
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
guard error == nil, let reponse = response as? HTTPURLResponse, let contentType = reponse.allHeaderFields["Content-Type"],let contentLength = reponse.allHeaderFields["Content-Length"]
else{
completion(nil)
return
}
let content = String(describing: contentType) + "/" + String(describing: contentLength)
completion(content)
}
task.resume()
}
用法是这样的:
getHeaderInformations(for: url, completion: { content in
print(content ?? 0)
})
我希望这个答案可以对某人有所帮助。
答案 1 :(得分:0)
您应该使用发布的HEAD请求的代码示例,但不要使用两个函数和两个Web请求,而要创建一个名为getHeaders的函数,该函数返回request.allHeaderFields
。然后,您可以创建一个调用getHeaders的方法,如果Content-Length和Content-Type是您所期望的,则执行GET请求以实际下载数据。
对于用户和服务器来说,这种方法将更加有效,因为它们只会执行1个HEAD请求,而不是2个。