fix图片预加载

This commit is contained in:
anlicheng 2025-04-14 10:41:18 +08:00
parent 34d3c5ad9b
commit 91718319f8
2 changed files with 44 additions and 7 deletions

View File

@ -19,13 +19,17 @@ final class CacheManager {
self.cacheDir = paths[0]
}
//
func preloadImages(urls: [String]) async throws {
let preloadUrls = urls.filter { url in !self.fileExists(urlString: url)}
//
try await withThrowingTaskGroup(of: Void.self) { group in
for url in urls {
for url in preloadUrls {
group.addTask {
if let data = try? await self.downloadImage(from: url) {
try? self.saveCacheFile(filename: "xx", data: data)
if let filename = self.getCacheFileName(urlString: url),
let data = try? await self.downloadImage(from: url) {
try? self.saveCacheFile(filename: filename, data: data)
}
}
}
@ -33,6 +37,29 @@ final class CacheManager {
}
}
//
func fileExists(urlString: String) -> Bool {
guard let cacheFileName = getCacheFileName(urlString: urlString) else {
return false
}
let url = cacheDir.appendingPathComponent(cacheFileName)
return FileManager.default.fileExists(atPath: url.path())
}
//
func readFileContents(urlString: String) -> Data? {
guard let cacheFileName = getCacheFileName(urlString: urlString) else {
return nil
}
let url = cacheDir.appendingPathComponent(cacheFileName)
if FileManager.default.fileExists(atPath: url.path()) {
return try? Data(contentsOf: url)
}
return nil
}
//
private func saveCacheFile(filename: String, data: Data) throws {
let fileURL = cacheDir.appendingPathComponent(filename)

View File

@ -143,12 +143,22 @@ struct IndexMainView: View {
indexModel.visiblePublisher.send(frames)
}
.onAppear {
let x = CacheManager.shared.getCacheFileName(urlString: "https://www.baidu.com/x/y/z.jpg?ts=1234")
let x1 = CacheManager.shared.getCacheFileName(urlString: "https://www.baidu.com/x/y/z.jpg")
print("x: \(x), x1: \(x1)")
Task {
let imageUrl = "https://lain.bgm.tv/pic/cover/l/ea/c4/479788_3pcsw.jpg"
let cacheManager = CacheManager.shared
try await cacheManager.preloadImages(urls: [imageUrl])
let result = cacheManager.fileExists(urlString: imageUrl)
print("cache file exists: \(result)")
print("data: ")
print(cacheManager.readFileContents(urlString: imageUrl))
}
}
}
}