ios - Swift 如何使用 Alamofire 和 SSZipArchive 从 URL 解压缩文件
问题描述
func downLoad(fileName:String) {
let urlString : String = "\(myurl)\(fileName)"
var localPath: NSURL?
let destination = DownloadRequest.suggestedDownloadDestination(for: .documentDirectory)
Alamofire.download(urlString, method: .get, encoding: JSONEncoding.default, to: destination)
.downloadProgress(queue: DispatchQueue.global(qos: .utility)) { progress in
print("Progress: \(progress.fractionCompleted)")
}
.validate { request, response, temporaryURL, destinationURL in
// Custom evaluation closure now includes file URLs (allows you to parse out error messages if necessary)
return .success
}
.responseJSON { response in
debugPrint(response)
print(response.destinationURL?.path)
print(response.destinationURL?.absoluteString)
let unzipDirectory = self.unzipPath(fileURL:fileName)
let success = SSZipArchive.unzipFile(atPath: (response.destinationURL?.path)!, toDestination: unzipDirectory!)
print(success)
if !success {
return
}
}
}
func unzipPath(fileName:String) -> String? {
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let url = NSURL(fileURLWithPath: path)
let pathComponent = url.appendingPathComponent("test\(fileName)")
do {
try FileManager.default.createDirectory(at: pathComponent!, withIntermediateDirectories: true, attributes: nil)
} catch {
return nil
}
return pathComponent?.absoluteString
}
我得到了正确的路径 response.destinationURL
但成功是假的
我试着atPath :
和response.destinationURL?.path
response.destinationURL?.absoluteString
但也失败了
我做错了什么
destinationURL?.path
返回这个
Optional("/Users/MyUser/Library/Developer/CoreSimulator/Devices/3FBAD207-E5AB-4FC1-8199-2269A1249D97/data/Containers/Data/Application/CB1C2EF5-3100-430B-B869-774C09B8EA7F/Documents/testFile.zip")
response.destinationURL?.absoluteString
返回这个
Optional("file:///Users/MyUser/Library/Developer/CoreSimulator/Devices/3FBAD207-E5AB-4FC1-8199-2269A1249D97/data/Containers/Data/Application/CB1C2EF5-3100-430B-B869-774C09B8EA7F/Documents/testFile.zip")
我认为这是正确的网址
为什么解压失败?
解决方案
通过查看您的代码,您用于源代码的路径是完美的。
对于目标路径,尝试将其更新为
func unzipPath(fileName:String) -> String? {
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString
let pathWithComponent = path.appendingPathComponent("test\(fileName)")
do {
try FileManager.default.createDirectory(atPath: pathWithComponent, withIntermediateDirectories: true, attributes: nil)
} catch {
return nil
}
return pathWithComponent
}
尝试并分享结果。
推荐阅读
- ssl - 导入根存储的非自签名证书是否需要(自签名)颁发者也导入根存储?
- c# - 使用 Nswag 控制台(来自 NPM 包)生成 C# 客户端
- azure-storage - 有没有办法以编程方式检查 Azure blob 存储的 SAS URL 是否过期?
- python - ValueError:检查输入时出错:预期 conv2d_9_input 的形状为 (64, 64, 3) 但得到的数组的形状为 (32, 32, 1)
- reactjs - react-spring中如何等待完成两个平行动画?
- jgrapht - 首先遍历有向图的广度,顶点首先具有最长的路径
- amazon-web-services - 空指针异常 Amazon S3 存储桶
- asp.net - ASP.Net Webforms 中的 AjaxFileUpload 控件
- javascript - 使用两个 for 循环(矩阵)的渲染函数不会渲染每一块
- symfony - 同名的表已经存在