SynologyKit
Swift的Synology文件API。
目录
特性
- 支持QuickConnect登录
- 支持IP/端口登录
- 列出共享文件夹
- 列出共享文件
- 获取文件信息
- 列出虚拟文件夹
- 收藏夹管理(列表/添加/删除/编辑/全部替换)
- 获取文件的缩略图
- 获取目录大小
- 计算文件MD5
- 目录管理(创建/重命名/列表)
- 复制移动文件
- 删除文件(文件夹)
- 压缩/解压缩文件
- 后台任务管理(列表/清除完成)
- 下载文件
- 上传文件
安装
CocoaPods
SynologyKit 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile
pod 'SynologyKit', '~>1.3.8'
Swift 包管理器
Swift 包管理器 是一个自动分发 Swift 代码的工具,并集成到 swift
编译器中。
设置好 Swift 包后,将 SynologyKit 作为依赖项添加到 Package.swift
中的 dependencies
值就像添加到依赖项一样简单。
dependencies: [
.package(url: "https://github.com/alexiscn/SynologyKit.git", from: "1.3.8")
]
开始使用
其他 API 可参考 群晖官方文档
创建 SynologyClient
let address = "192.168.1.5"
let port = 5000
client = SynologyClient(host: address, port: port, enableHTTPS: false)
或通过快速连接 ID
client = SynologyClient(host: "your_quick_connect_id")
登录
在创建 SynologyClient 后,您可以使用以下代码进行登录
let account = "your_synology_account"
let password = "your_synology_password"
client.login(account: account, passwd: password) { [weak self] response in
switch response {
case .success(let authRes):
self?.client?.updateSessionID(authRes.sid)
self?.handleLoginSuccess()
print(authRes.sid)
case .failure(let error):
print(error.description)
}
}
当获取到 sid
后,应使用 SessionID 更新 SynologyClient
。然后您就可以访问所有 REST API。
列出共享文件夹
在列出文件夹文件之前,您应该首先列出共享文件夹。
client.listShareFolders { response in
switch response {
case .success(let result):
if let shares = result.shares {
print("share folders count:\(shares.count)")
}
case .failure(let error):
print(error)
}
}
列出文件夹
client.listFolder(folder) { response in
switch response {
case .success(let result):
if let files = result.files {
for file in files {
print("filename: \(file.name), path:\(file.path), isDirectory:\(file.isdir)")
}
}
case .failure(let error):
print(error)
}
}
下载文件
下载文件和使用 Alamofire
一样简单。
let destination: DownloadRequest.Destination = { (temporaryURL, response) in
let options = DownloadRequest.Options.removePreviousFile
let localURL = URL(fileURLWithPath: NSHomeDirectory().appending("/Documents/\(file.name)"))
return (localURL,options)
}
client.downloadFile(path: file.path, to: destination).downloadProgress { progress in
print(progress)
}.response { response in
if response.error == nil, let path = response.fileURL?.path {
print("File Downloaded to :\(path)")
}
}
上传文件
使用 Alamofire 完成上传文件。
client.upload(data: data, filename: "test.json", destinationFolderPath: folder, createParents: true, options: nil) { result in
switch result {
case .success(let request, _, _):
request.uploadProgress { progress in
print(progress)
}.response { response in
if response.error == nil {
print("Uploaded")
}
}
case .failure(let error):
print(error)
}
}
搜索文件
搜索文件
var options = SynologyClient.SearchOptions();
options.pattern = "*.jpg";
client.search(atFolderPath: folderPath, options: options) { result in
switch result {
case .success(let task):
for file in task.files {
print(file.path)
}
case .failure(let error):
print(error.description)
}
}
许可证
SynologyKit
是 MIT 许可的。 许可证