React Native或Swift gzip解压缩到iOS上的Documents目录

bjp0bcyl  于 2023-08-02  发布在  Swift
关注(0)|答案(1)|浏览(154)

我有一个React Native应用程序,需要解压缩gzip文件,以便它可以访问gzip文件中的各个文件。就像它的工作原理一样,当你点击iOS文件应用程序中的文件时,它会将所有内容提取到同一目录中的文件夹中。我可以使用RNFS读取gzip,但这只是原始数据流。我需要已经压缩好的文件。
我也可以在原生Swift中这样做,但我看不到这样做的方法。NSData有一个decompress()函数,但这也只是原始数据。一定有可能,有什么想法吗?
我尝试了react-native-zip-archive unzip(base64DecodedString, filePath),但它似乎不支持gzip。

agxfikkp

agxfikkp1#

这里有一个在Swift中实现的方法-你需要Gzip和Light-Swift-Untar Swift包:

// JSON with base64 value which represents the tar.gz
if let type = resultDict["resultsData"] as? String {
  // create Data from the base64 string
  if let gzipData = Data(base64Encoded: type, options: .ignoreUnknownCharacters) {
    // check if isGzipped, from Gzip Swift pkg
    if gzipData.isGzipped {
        let ddata = NSData(base64Encoded: type)
        let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
        let filePath = "\(documentsPath)/unpacked.tar"
        let url = URL(fileURLWithPath: filePath)
        do{
          // first decompress gzip and write the tar file, using Gzip Swift pkg
          try! gzipData.gunzipped().write(to: url, options: .atomic)
          // next use the Light-Swift-Untar FileManager extension to unarchive the tar
          try FileManager.default.createFilesAndDirectories(path: "\(documentsPath)/exxxtracted", tarPath: filePath)
        } catch let failedError {
          print("Failed to write the gzip data due to \(failedError.localizedDescription)")
        }
    }
  }
}

字符串

相关问题