// 下载文件类
// LoadFilesManager.swift
// NVRCloudIOS
//
// Created by Nvr on 2018/12/28.
// Copyright © 2018 zhangyu. All rights reserved.
//
import UIKit
import Alamofire
import MBProgressHUD
import SwiftyJSON
class LoadFilesManager: NSObject {
static let shared = LoadFilesManager()
let filesManager = FileManager.default
//创建文件夹的根目录
var rootPath:URL?{
return filesManager.urls(for: .documentDirectory, in: .userDomainMask).first
}
//下载合同
func loadContract(contractNo:String,callBack:@escaping UpdateCallBack) {
let progressHud = MBProgressHUD.showAdded(to: UIApplication.shared.keyWindow!, animated: true)
progressHud.mode = .annularDeterminate
progressHud.label.text = "下载中..."
if let path = rootPath {
//如果存在文件夹,创建文件
if createFolder(name: "Contract", baseUrl: path as NSURL){
let result = creatFlie(fliesName: "/Contract/\(contractNo).docx")
if result.0{
let urlString = String(format: GlobalConfig.RentalPath.downLoadContract,contractNo)
guard let url = URL(string: urlString) else{
return
}
restApiService.setAlamofireHeader(contentType: ContentType.JSON, url: urlString)
let request = Alamofire.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: header)
request.downloadProgress(closure: { (progress) in
progressHud.progressObject = progress
}).responseJSON { (respons) in
DispatchQueue.main.async {
progressHud.hide(animated: true)
}
switch respons.result {
case .success(let value):
guard let docString = JSON(value)["result"].string else{
return
}
do {
let base64Data = Data.init(base64Encoded: docString, options: [])
try base64Data?.write(to: URL(fileURLWithPath: result.1))
callBack()
}catch{
NVRLOG("写入失败")
}
case .failure:
break
}
}
}
}
}
}
}
//文件操作相关
extension LoadFilesManager{
//创建文件夹
func createFolder(name:String,baseUrl:NSURL) -> Bool{
do {
if let folder = baseUrl.appendingPathComponent(name, isDirectory: true){
let exist = filesManager.fileExists(atPath: folder.path)
if !exist {
try filesManager.createDirectory(at: folder, withIntermediateDirectories: true,
attributes: nil)
}
return true
}
return false
}catch{
NVRLOG("创建失败")
return false
}
}
//创建文件
func creatFlie(fliesName:String) -> (Bool,String){
guard let rootPath = rootPath?.path else {
return (false,"")
}
let path = rootPath + fliesName
let exist = filesManager.fileExists(atPath: path)
if !exist{
if filesManager.createFile(atPath: path, contents: nil, attributes: nil){
NVRLOG("文件创建成功")
return (true,path)
}else{
NVRLOG("创建失败")
return (false,path)
}
}
return (true,path)
}
//判断文件是否存在
func existDownLoadContract(contractNo:String) -> Bool{
guard let rootPath = rootPath?.path else {
return false
}
let path = rootPath + "/Contract/\(contractNo).docx"
let exist = filesManager.fileExists(atPath: path)
return exist
}
//获取Document文件夹下所有文件
func getFilesInFolder(subPath:String) -> [String]{
guard let rootPath = rootPath?.path else {
return []
}
let path = rootPath + "/Contract/"
let dirEnum = filesManager.enumerator(atPath: path)
var contractNoPaths = [String]()
while let file = dirEnum?.nextObject() as? String{
if file.hasSuffix(".docx") || file.hasSuffix(".doc"){
contractNoPaths.append(path+file)
}
}
return contractNoPaths
}
}
//
// ContractDetailViewController+QuickLook.swift
// NVRCloudIOS
//
// Created by Nvr on 2018/12/29.
// Copyright © 2018 zhangyu. All rights reserved.
//
import Foundation
import QuickLook
extension ContactDetailViewController:QLPreviewControllerDelegate,QLPreviewControllerDataSource{
func jumpToQuickLook(contractNo:String){
allDownLoadsContract = LoadFilesManager.shared.getFilesInFolder(subPath: "/Contract")
var currentIndex = 0
guard let list = allDownLoadsContract else{
return
}
for (index,filePath) in list.enumerated() {
if filePath.contains(contractNo){
currentIndex = index
}
}
let qlVc = QLPreviewController.init()
qlVc.delegate = self
qlVc.dataSource = self
qlVc.currentPreviewItemIndex = currentIndex
self.navigationController?.pushViewController(qlVc, animated: true)
}
func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
return allDownLoadsContract?.count ?? 0
}
func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
guard let list = allDownLoadsContract else{
return NSURL(fileURLWithPath:"")
}
return NSURL(fileURLWithPath: list[index])
}
}