Для работы с файлами создайте приложение «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»:
«Get directory». Получение списка файлов указанной директории;
«Get file meta». Получение метаинформации файла;
«Get file». Получение файла;
«Put file». Отправление файла;
«Delete file». Удаление файла на сервере.
Примечание. При загрузке приложения выполняется аутентификация, кнопки недоступны. Если аутентификация выполнена успешно, то кнопки будут доступны и в текстовом поле появится надпись «Authentication success».
Для выполнения примера:
Нажмите кнопку «Get directory».
При нажатии на кнопку инициализируется запрос списка папок и файлов в указанной корневой директории файлового ресурса «.».
В результате будет отображен список содержащихся папок и текстовых файлов в директории:

Введите файл file.txt в текстовое поле и нажмите кнопку «Get file meta».
В результате будет получена метаинформация указанного файла с сервера мобильной платформы:

Введите файл file.txt в текстовое поле и нажмите кнопку «Get file».
В результате будет получен указанный файл с сервера мобильной платформы:

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

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

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

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

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

Проверьте удаление файла 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
}
}
См. также: