ZipPinch
是一个 URLSession
的扩展,用于远程处理 zip 文件。它无需下载整个 zip 文件即可读取其内容,并解压所需的文件。
假设您需要远程访问多个文件(不同类型的资源:图片、字体等)。并且这些文件可能会被更改和添加。也许这些文件按区域设置分组,例如,您的应用程序需要特定区域设置的资源。 在正常情况下,您需要一个服务器解决方案,返回包含可用资源描述的 JSON。 例如,您可以使用任何 PaaS,但 ZipPinch
提供了一个更简单的解决方案。
它会向远程 ZIP 存档发出请求,并返回其结构,其中包含文件大小和文件修改日期。 找到免费的 zip 文件托管并不难。 未压缩存档中的文件本质上会被原样下载,而不会花费时间进行解压缩。
来自演示应用程序 Hubble 的屏幕截图
File
⟩ Add Packages...
Add Package
https://github.com/buh/ZipPinch.git
Add Package
URLSession
实例。然后,通过直接指向 ZIP 文件的 URL
请求内容。let urlSession = URLSession(configuration: .default)
let entries = try await urlSession.zipEntries(from: url)
注意
您还可以添加 URLSessionTaskDelegate
或使用自定义的 URLRequest
。
let data = try await urlSession.zipEntryData(entry, from: url)
查看 Hubble 演示应用程序,以查看由哈勃太空望远镜拍摄的存档中的选定图像。
要下载并显示进度,必须指定一个 ZIPProgress
对象
let data = try await urlSession.zipEntryData(entry, from: url, progress: .init() { progressValue in
Task { @MainActor in
self.progress = progressValue
}
})
let entries = try await urlSession.zipEntries(from: url)
let rootFolder = entries.rootFolder()
// folderData: [(entry: ZIPEntry, data: Data)]
let folderData = try await urlSession.zipFolderData(folder, from: url)
// folderData: [(entry: ZIPEntry, data: Data)]
let folderData = try await urlSession.zipFolderData(folder, from: url, progress: .init() { progressValue in
Task { @MainActor in
self.progress = progressValue
}
})
URLRequest
URLSessionTaskDelegate
进行任务管理您可以在这里请我喝杯咖啡 ☕️
ZipPinch
在 MIT 许可证下可用