【发布时间】:2021-02-16 10:43:02
【问题描述】:
我有以下代码用网站的图标填充图像:
import SwiftUI
struct ContentView: View {
@State var website = "https://www.stackoverflow.com/favicon.ico"
@State var favicon : String?
var body: some View {
VStack {
if favicon != nil {
Image(uiImage: favicon!.toImage()!)
}
TextField("Sito", text: $website).padding()
Button(action: {
website = "https://www." + website + ".com/favicon.ico"
}, label: {
Text("Complete URL")
}).padding()
Button(action: {
if let url = URL(string: website) {
let session = URLSession.shared.dataTask(with: url) { [self] (data,response,error) in
if let error = error {
debugPrint(error.localizedDescription)
return
}
if let data = data {
var immagineTemp : UIImage = UIImage(systemName: "questionmark")!
if UIImage(data: data) != nil {
immagineTemp = UIImage(data: data)!
} else {
debugPrint("URL was redirected")
}
favicon = immagineTemp.toString()
}
}
session.resume()
}
}, label: {
Text("Get favicon")
}).padding()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
extension String {
func toImage() -> UIImage? {
if let data = Data(base64Encoded: self, options: .ignoreUnknownCharacters){
return UIImage(data: data)
}
return nil
}
}
extension UIImage {
func toString() -> String? {
let data: Data? = self.pngData()
return data?.base64EncodedString(options: .endLineWithLineFeed)
}
}
通常,var 网站是空的,可以通过 TextField 填充,但出于本示例的目的,我使用该 URL 填充它,因为如果您使用 Stackoverflow 网站下载 favicon,正如我在代码中所写上面,它不起作用,因为 URL“https://www.stackoverflow.com/favicon.ico”将您重定向到“https://cdn.sstatic.net/Sites/stackoverflow/Img/favicon.ico?v =ec617d715196",这是 Stackoverflow favicon 所在的位置。正因为如此,“immagineTemp = UIImage(数据:数据)!”结果为零,它放在有 debugPrint("URL was redirected") 的括号中。
我希望它自动检测一个 URL 将您重定向到另一个 URL 的事实,以便它可以继续自行下载网站图标。有办法吗?
【问题讨论】:
-
据我尝试,URL
https://www.stackoverflow.com/favicon.ico返回带有https://stackoverflow.com/favicon.ico,https://cdn.sstatic.net/Sites/stackoverflow/Img/favicon.ico?v=ec617d715196(不是https://cdn.sstatic.net/Sites/stackoverflow/Img/favicon.ico?v=ec617d715196)的 301 响应,并且重定向的 URL 返回 404 响应。这似乎是服务器端的问题。 -
直到今天早上,当我尝试访问
https://www.stackoverflow.com/favicon.ico时,我一直被重定向到我链接的另一个网站。但是一般重定向的 URL 呢?有没有办法自动处理它们? -
"有没有办法自动处理它们?"> 使用代码中的默认配置,重定向会在 URLSession 中自动处理。而我刚才又试了一次,原来的URL返回了
location: https://stackoverflow.com/favicon.ico,https://cdn.sstatic.net/Sites/stackoverflow/Img/favicon.ico?v=ec617d715196的301响应。您可能错过了第一部分,或者从今天早上起它突然发生了变化。 -
“第一部分”是什么意思?
-
location:包含https://stackoverflow.com/favicon.ico作为第一部分,https://cdn.sstatic.net/Sites/stackoverflow/Img/favicon.ico?v=ec617d715196作为第二部分,用逗号分隔。
标签: url redirect download swiftui favicon