Swift Как разархивировать файл с URL с помощью Alamofire и SSZipArchive

 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")

я думаю, что это правильный URL

почему не удалось распаковать?

1 ответ

Решение

Глядя на ваш код, путь, который вы используете для источника, идеален.

Для пути назначения попробуйте обновить его до

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
}

Попробуйте и поделитесь результатами.

Другие вопросы по тегам