Сохранить файл в пользовательскую папку

В AppDelegate я создаю скрытую папку в.documents, если она не существует:

let fileManager = FileManager.default
    let path  = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!
    let audioKitFilesFolder = path.appendingPathComponent(".AudioKitFilesFolder")
    var isDir : ObjCBool = false
    if fileManager.fileExists(atPath: audioKitFilesFolder.absoluteString, isDirectory:&isDir) {
        if isDir.boolValue {
            print("file exists and is a directory")
        } else {
            print("file exists and is not a directory")
        }
    } else {
        do {
        try fileManager.createDirectory(at: audioKitFilesFolder, withIntermediateDirectories: true, attributes: nil)
        } catch {
            print("Can't Create Folder \(error)")
        }
    }

В моем Networking API у меня есть func, который сохраняет файл из Интернета в.documents. Но мне нужно сохранить этот файл в моей скрытой папке. Как я могу получить путь к этой папке для моего метода copyItem?

Функциональность API Newtwork:

func downloadFile(id: Int, url: URL, fileName: String) {
    var request = URLRequest(url: url)
    URLSession.shared.downloadTask(with: url, completionHandler: { location, response, error in
        guard let location = location, error == nil else { return }
        do {
            let fileManager = FileManager.default
            let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
            let fileURL = documentsURL.appendingPathComponent(fileName)
            try fileManager.copyItem(at: location, to: fileURL)
            try self.router.configureParameters(bodyParameters: ["uuid": UserDefaultsHelper.uuid], urlParameters: nil, request: &request)
        } catch {
            print(error)
        }
    }).resume()

    URLSession.shared.dataTask(with: request) { data, response, error in
        if let response = response {
            print(response)
        }
        if let data = data {
            do {
                let json = try JSONSerialization.jsonObject(with: data, options: [])
                print(json)
            } catch {
                print(error)
            }
        }
        }.resume()
}

1 ответ

Что произойдет, если вы измените

 do {
            let fileManager = FileManager.default
            let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
            let fileURL = documentsURL.appendingPathComponent(fileName)
            try fileManager.copyItem(at: location, to: fileURL)
            try self.router.configureParameters(bodyParameters: ["uuid": UserDefaultsHelper.uuid], urlParameters: nil, request: &request)
        } catch {

в

 do {
            let fileManager = FileManager.default
            let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
            let audioKitFilesFolder = documentsURL.appendingPathComponent(".AudioKitFilesFolder")

            let fileURL = audioKitFilesFolder.appendingPathComponent(fileName)
            try fileManager.copyItem(at: location, to: fileURL)
            try self.router.configureParameters(bodyParameters: ["uuid": UserDefaultsHelper.uuid], urlParameters: nil, request: &request)
        } catch {

и, возможно, удалить. от. AudioKitFilesFolder во всех местах

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