Как распаковать файл json с паролем в swift? - PullRequest
0 голосов
/ 08 ноября 2019

Решение:

Для того, кто получил эту ошибку:

[SSZipArchive] Не удалось открыть файл при разархивировании. (Ошибка домена = NSPOSIXErrorDomain Code = 20 «Не каталог»)

Убедитесь, что местом назначения является каталог при использовании функции unzipFile.

SSZipArchive.unzipFile(atPath: String, toDestination: String, overwrite: Bool, password: String?)

Вопрос:

Как распаковать архивjson файл с паролем в Swift? Я использовал сторонний SDK и скачал файл, тип файла Data.

Файл объявлен в виде zip-файла и должен быть распакован в файл json с паролем .

Я сохраняю файл в FileManager.documentDirectoryи назовите его с расширением .zip. Затем я попытался разархивировать файл с помощью ZipArchive, но получил следующую ошибку:

[SSZipArchive] Failed to open file on unzipping.(Error Domain=NSPOSIXErrorDomain Code=20 "Not a directory")

Я также сохранил файл с расширением .json, затем разархивировал его, но получил ту же ошибку, что и выше.

Я загрузил сохраненный файл в контейнер и открыл его, и результаты перечислены ниже:

(1) Для файла .zip: я не смог его открыть.

Can't decompressed xxx.json.zip to Documents.
(error -2: No similar file or directory)

(2) К .json файлу: я получил искаженный текст вроде

∫ôFk;|T|D˚®è•Éjê‹¡Ò;X≈∞)˘–7ÑØZl≥MÇz-n·ù!ê}˜fflêÔæv\£F>RBZ1Myfª—Q˘∏àúˇá≥˙Ïèãd”

Здесь показан мой код.

func saveZipFile(filename: String, file: Data) {
    let documentDirURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let fileURL = documentDirURL.appendingPathComponent("\(filename).zip")
    print("File Path: \(fileURL.path)")

    do {
        try file.write(to: fileURL, options: .atomic)

        try SSZipArchive.unzipFile(atPath: fileURL.path, toDestination: fileURL.path, overwrite: true, password: finalKey)
    } catch let err {
        print("Error: \(err.localizedDescription)")
    }
}

Файл должен бытьчитаемый человеком файл json, если он правильно распакован.

1 Ответ

0 голосов
/ 08 ноября 2019

Попробуйте это:

func saveZipFile(filename: String, file: Data) {

    let documentDirURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let fileURL = documentDirURL.appendingPathComponent("\(filename).zip")
    let destination = documentDirURL.path + "/MyZipFiles"
    print("File Path: \(fileURL.path)")

    do {
        try file.write(to: fileURL, options: .atomic)

        try SSZipArchive.unzipFile(atPath: fileURL.path, toDestination: destination, overwrite: true, password: finalKey)
    } catch let err {
        print("Error: \(err.localizedDescription)")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...