Search code examples
iosswiftzip

Change file extension to .zip and unzip file from document folder


Using Alamofire for downloading. File is being downloaded in app document folder, in attachment, there is .hub file. I need to change .hub file to .zip than i need to unzip this file for audio file. Code for downloading ->

func getAudioFileFromServer(url: String, uuid: String) {

    let fileURL = URL(string: url)
    var request = URLRequest(url:fileURL!)
    request.setValue("myapikey", forHTTPHeaderField: "x-api-key")
    let destination = DownloadRequest.suggestedDownloadDestination()
    Alamofire.download(request, to: destination).validate().responseData { response in
        debugPrint(response)
        print(response.destinationURL!)
     }
}

Response from server ->

file:///var/mobile/Containers/Data/Application/FC5F17C4-E8D3-4406-926A-97EB9447D87B/Documents/'bac6151ffbe74140a31408938c91fa33.hub'

Solution

  • After downloading the file change the extension to .zip with "saveFileInDirectory" method and with success block we can get the main file.

     self.saveFileInDirectory(data: responce.result.value, fileName: "\(name!).zip", successblock: { (path) in
                print(path!)
                var filepath = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)[0]
                let url = URL(fileURLWithPath: filepath)
                do {
                    try FileManager.default.createDirectory(at: url, withIntermediateDirectories: true, attributes: nil)
                    let done = SSZipArchive.unzipFile(atPath: path!, toDestination: url.path)
                    if done{
                        let items = try FileManager.default.contentsOfDirectory(atPath: url.path)
                        print(items)
                        let destinationUrl = url.appendingPathComponent(items[0])
                        print(destinationUrl)
                    }
                } catch let error as NSError{
                    print(error)
                }
            })
    
    
    func saveFileInDirectory(data: Data?, fileName: String?, successblock: @escaping (_ path: String?) -> Void) { // To add the image to cache for given identifier.
          let paths = NSSearchPathForDirectoriesInDomains( .documentDirectory, .userDomainMask, true)[0] as String
          let path = paths.appending("/\(fileName!)")
             if (FileManager.default.fileExists(atPath: path)) {
        try! FileManager.default.removeItem(atPath: path)
             } else {
        do {
            try data?.write(to: URL(fileURLWithPath: path, isDirectory: false))
            successblock(path)
        } catch {
            successblock(nil)
            print("Error while caching the data in cache folder.")
        }
    }}