Пример работы с файлами

Для работы с файлами создайте приложение «HHFWFiles», в котором используются методы фреймворка:

Имя метода Краткое описание
initWithCredentials (_: host: environment: project: application: device:) Метод выполняет инициализацию фреймворка.
auth (_: password:) Метод выполняет аутентификацию пользователя по логину и паролю.
getDirectory (_: mountName: handler:) Метод возвращает информацию о содержимом директории.
getFileMeta (_: mountName: handler:) Метод возвращает информацию о файле.
getFile (_: mountName: handler:) Метод скачивает файл с сервера мобильной платформы.
putFile (_: mountName: handler:) Метод загружает файл на сервер мобильной платформы.
deleteFile (_: mountName: handler:) Метод удаляет файл с сервера мобильной платформы.

Приложение «HHFWFiles» состоит из одного экрана, текстового поля «UITextField», текстового представления «UITextView» и кнопок «UIButton»:

Примечание. При загрузке приложения выполняется аутентификация, кнопки недоступны. Если аутентификация выполнена успешно, то кнопки будут доступны и в текстовом поле появится надпись «Authentication success».

Для выполнения примера:

  1. Нажмите кнопку «Get directory».

При нажатии на кнопку инициализируется запрос списка папок и файлов в указанной корневой директории файлового ресурса «.».

В результате будет отображен список содержащихся папок и текстовых файлов в директории:

  1. Введите файл file.txt в текстовое поле и нажмите кнопку «Get file meta».

В результате будет получена метаинформация указанного файла с сервера мобильной платформы:

  1. Введите файл file.txt в текстовое поле и нажмите кнопку «Get file».

В результате будет получен указанный файл с сервера мобильной платформы:

Файл file.txt будет записан в «HomeDirectory» приложения:

  1. Создайте в «HomeDirectory» новый файл file1.txt, который будет только на мобильном устройстве:

  1. Введите файл file1.txt в текстовое поле и нажмите кнопку «Put file».

В результате будет отправлен указанный файл на сервер мобильной платформы:

  1. Проверьте отправку файла file1.txt с помощью кнопки «Get directory».

В результате будет получен новый список папок и файлов, в котором содержится файл file1.txt:

  1. Введите файл file1.txt в текстовом поле и нажмите кнопку «Delete file».

В результате будет удален файл file1.txt с сервера мобильной платформы:

  1. Проверьте удаление файла file1.txt с сервера мобильной платформы с помощью кнопки «Get directory».

В результате будет получен список папок и файлов, в котором отсутствует файл file1.txt:

Код приложения:

import UIKit
 
class ViewController: UIViewController {
 
    //MARK: - Outlets
    @IBOutlet weak var fileNameTextField: UITextField!
    @IBOutlet weak var resultTextView: UITextView!
    @IBOutlet weak var getDirectoryButton: UIButton!
    @IBOutlet weak var getFileMetaButton: UIButton!
    @IBOutlet weak var getFileButton: UIButton!
    @IBOutlet weak var putFileButton: UIButton!
    @IBOutlet weak var deleteFileButton: UIButton!
 
    //MARK: - View life cycle
    override func viewDidLoad() {
        super.viewDidLoad()
        self.deactivateButtons()
        self.initializeFramework()
        self.auth {
            self.activateButtons()
            self.resultTextView.text = "Authentication success"
        }
    }
 
    //MARK: - Actions
    @IBAction func viewTapped(_ sender: UITapGestureRecognizer) {
        self.fileNameTextField.resignFirstResponder()
    }
 
    @IBAction func getDirectoryPressed(_ sender: UIButton) {
        self.getDirectory { (jsonResult) in
            self.resultTextView.text = String(format: "%@", jsonResult)
        }
    }
 
    @IBAction func getFileMetaPressed(_ sender: UIButton) {
        self.getFileMeta { (jsonResult) in
            self.resultTextView.text = String(format: "%@", jsonResult)
        }
    }
 
    @IBAction func getFilePressed(_ sender: UIButton) {
        self.getFile { (jsonResult) in
            self.resultTextView.text = String(format: "%@", jsonResult)
        }
    }
 
    @IBAction func putFilePressed(_ sender: UIButton) {
        self.putFile { (jsonResult) in
            self.resultTextView.text = String(format: "%@", jsonResult)
        }
    }
 
    @IBAction func deleteFilePressed(_ sender: UIButton) {
        self.deleteFile { (jsonResult) in
            self.resultTextView.text = String(format: "%@", jsonResult)
        }
    }
 
    //MARK: - HHFW - Framework initialization
     private func initializeFramework() {
        let apiVersion: String = "v1"
        let host: String = "http://testmasterfmp.fsight.cloud/"
        let environment: String = "Leonid_environment"
        let project: String = "Leonid_project"
        let application: String = "app"
        let device: String = (UIDevice.current.identifierForVendor?.uuidString)!
        HHFWController.sharedInstance().initWithCredentials(
            apiVersion,
            host: host,
            environment: environment,
            project: project,
            application: application,
            device: device
        )
    }
 
    //MARK: - HHFW - Authentication
    private func auth(completion: @escaping ()->()) {
        let username: String = "Leonid"
        let password: String = "123123"
        HHFWController.sharedInstance().auth(username, password: password){ (jsonResult) in
            if let jsonDict = jsonResult as? NSDictionary,
                let status = jsonDict["status"] as? String, status == "ok" {
                print("Auth success")
                completion()
            } else {
                print("Auth error")
            }
        }
    }
 
    //MARK: - HHFW - Get files in directory
    private func getDirectory(completion: @escaping (NSDictionary)->()) {
        let directory: String = "."
        let mountName: String = "nfs4"
        HHFWController.sharedInstance().getDirectory(directory, mountName: mountName) { (jsonResult) in
            if let jsonDict = jsonResult as? NSDictionary,
                let status = jsonDict["status"] as? String, status == "ok" {
                print("Get directory success")
                completion(jsonDict)
            } else {
                print("Get directory error")
            }
        }
    }
 
    //MARK: - HHFW - Get file meta-data
    private func getFileMeta(completion: @escaping (NSDictionary)->()) {
        guard let fileName: String = self.fileNameTextField.text else { return }
        let mountName: String = "nfs4"
        HHFWController.sharedInstance().getFileMeta(fileName, mountName: mountName) { (jsonResult) in
            if let jsonDict = jsonResult as? NSDictionary,
                let status = jsonDict["status"] as? String, status == "ok" {
                print("Get file meta success")
                completion(jsonDict)
            } else {
                print("Get file meta error")
            }
        }
    }
 
    //MARK: - HHFW - Get file
    private func getFile(completion: @escaping (NSDictionary)->()) {
        guard let fileName: String = self.fileNameTextField.text else { return }
        let mountName: String = "nfs4"
        HHFWController.sharedInstance().getFile(fileName, mountName: mountName) { (jsonResult) in
            if let jsonDict = jsonResult as? NSDictionary,
                let status = jsonDict["status"] as? String, status == "ok" {
                print("Get file success")
                completion(jsonDict)
            } else {
                print("Get file error")
            }
    }
 
    //MARK: - HHFW - Put file
    private func putFile(completion: @escaping (NSDictionary)->()) {
        guard let fileName: String = self.fileNameTextField.text else { return }
        let mountName: String = "nfs4"
        HHFWController.sharedInstance().putFile(fileName, mountName: mountName) { (jsonResult) in
            if let jsonDict = jsonResult as? NSDictionary,
                let status = jsonDict["status"] as? String, status == "ok" {
                print("Put file success")
                completion(jsonDict)
            } else {
                print("Put file error")
            }
        }
    }
 
    //MARK: - HHFW - Delete file
    private func deleteFile(completion: @escaping (NSDictionary)->()) {
        guard let fileName: String = self.fileNameTextField.text else { return }
        let mountName: String = "nfs4"
        HHFWController.sharedInstance().deleteFile(fileName, mountName: mountName) { (jsonResult) in
            if let jsonDict = jsonResult as? NSDictionary,
                let status = jsonDict["status"] as? String, status == "ok" {
                print("Delete file success")
                completion(jsonDict)
            } else {
                print("Delete file error")
            }
        }
    }
 
    //MARK: - View methods
    private func deactivateButtons() {
        self.getDirectoryButton.isEnabled = false
        self.getFileMetaButton.isEnabled = false
        self.getFileButton.isEnabled = false
        self.putFileButton.isEnabled = false
        self.deleteFileButton.isEnabled = false
    }
 
    private func activateButtons() {
        self.getDirectoryButton.isEnabled = true
        self.getFileMetaButton.isEnabled = true
        self.getFileButton.isEnabled = true
        self.putFileButton.isEnabled = true
        self.deleteFileButton.isEnabled = true
    }
}

См. также:

Примеры использования iOS-фреймворка