首页 > 解决方案 > 在下载之前获取放置在远程服务器上的图像的大小

问题描述

我正在尝试获取放置在远程服务器中的图像的 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

在这种情况下,数据为零。我的错误在哪里?

标签: swiftxcodeimagemacoshttp-headers

解决方案


经过几天的搜索,我找到了这个解决方案:

    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)

})

我希望这个答案可以帮助某人。


推荐阅读