swift - 在下载之前获取放置在远程服务器上的图像的大小
问题描述
我正在尝试获取放置在远程服务器中的图像的 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
在这种情况下,数据为零。我的错误在哪里?
解决方案
经过几天的搜索,我找到了这个解决方案:
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)
})
我希望这个答案可以帮助某人。
推荐阅读
- python - How to read file chunk by chunk?
- r - 我可以使用 R {targets} 包为不同的目标设置不同的并行度吗?
- html - 如何制作响应式图像?
- python-3.x - 如何在 Django Rest Framework 中使用 base64 上传多个文件?
- php - 如何将 AES 解密从 Javascript 转换为 php
- php - Elementor Pro 类 - 找不到类
- python - Pygame set_mode 没有显示正确的大小
- javascript - 为什么 beforeDestroyed 函数不起作用?
- javascript - 如何在计算的表单字段中使用 wordpress 帖子标题?
- node.js - Mongoose:如何只返回特定字段?