TSBusinessFileManager.swift 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. //
  2. // TSBusinessFileManager.swift
  3. // AIRingtone
  4. //
  5. // Created by 100Years on 2025/3/27.
  6. //
  7. class TSBusinessFileManager {
  8. /// 获取 Video 下载后保存的的文件件路径
  9. static var saveVideoPathURL:URL = {
  10. let saveRingPathURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("video")
  11. return saveRingPathURL
  12. }()
  13. static var saveCacheAllPathURL:URL = {
  14. let saveRingPathURL = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!.appendingPathComponent("cacheAll")
  15. return saveRingPathURL
  16. }()
  17. public static func generateFileName(
  18. urlString: String,
  19. fileEx:String? = nil,
  20. missingEx:String? = nil
  21. )->String?{
  22. guard let url = URL(string: urlString) else{
  23. return nil
  24. }
  25. var fileName = url.path.md5
  26. // 使用 URL 的 MD5 哈希值作为缓存文件名,附加 URL 的后缀名
  27. var fileExtension = ""
  28. if let fileEx = fileEx {
  29. fileExtension = fileEx
  30. }else{
  31. var missingExStr = ""
  32. if let missingEx = missingEx {
  33. missingExStr = missingEx
  34. }
  35. fileExtension = url.pathExtension.isEmpty ? missingExStr : url.pathExtension
  36. }
  37. if fileExtension.count > 0 {
  38. fileName = url.path.md5 + ".\(fileExtension)"
  39. }
  40. return fileName
  41. }
  42. //获取 urlstring 本地的缓存 url path
  43. public static func getLocalURL(
  44. urlString: String,
  45. fileEx:String? = nil,
  46. missingEx:String? = nil)->URL?{
  47. guard let fileName = generateFileName(urlString: urlString,fileEx:fileEx,missingEx: missingEx) else{
  48. return nil
  49. }
  50. //检查文件是否已存在于缓存中
  51. let ringFileURL = saveVideoPathURL.appendingPathComponent(fileName)
  52. if FileManager.default.fileExists(atPath: ringFileURL.path) {
  53. print("文件已存在于缓存中: \(ringFileURL)")
  54. return ringFileURL
  55. }
  56. let cachedFileURL = saveCacheAllPathURL.appendingPathComponent(fileName)
  57. if FileManager.default.fileExists(atPath: cachedFileURL.path) {
  58. print("文件已存在于缓存中: \(cachedFileURL)")
  59. return cachedFileURL
  60. }
  61. return nil
  62. }
  63. }
  64. //缓存路径
  65. extension TSBusinessFileManager {
  66. //检查 url 对不对
  67. public static func generateLocalURL(
  68. from urlString: String,
  69. fileEx:String? = nil,
  70. missingEx:String? = nil,
  71. frontPathURL:URL,
  72. completion:((String?, Error?) -> Void)? = nil
  73. )->URL?
  74. {
  75. guard let url = URL(string: urlString) else{
  76. completion?(nil, NSError(domain: "url null", code: 0))
  77. return nil
  78. }
  79. if !urlString.contains("http") && urlString.contains("/"){
  80. completion?(urlString.fillCachePath, nil)
  81. return nil
  82. }
  83. let fileManager = FileManager.default
  84. let cacheAllDirectory = frontPathURL
  85. // 创建 `cacheAll` 文件夹(如果不存在)
  86. if !fileManager.fileExists(atPath: cacheAllDirectory.path) {
  87. do {
  88. try fileManager.createDirectory(at: cacheAllDirectory, withIntermediateDirectories: true, attributes: nil)
  89. } catch {
  90. completion?(nil, error)
  91. return nil
  92. }
  93. }
  94. guard let fileName = generateFileName(urlString: urlString,fileEx:fileEx,missingEx: missingEx) else{
  95. completion?(nil, NSError(domain: "url error", code: 0))
  96. return nil
  97. }
  98. let cachedFileURL = cacheAllDirectory.appendingPathComponent(fileName)
  99. return cachedFileURL
  100. }
  101. }
  102. //缓存路径
  103. extension TSBusinessFileManager {
  104. //检查 url 对不对
  105. public static func generateCachesURL(
  106. from urlString: String,
  107. fileEx:String? = nil,
  108. missingEx:String? = nil,
  109. cacheDirectory:String = "cacheAll",
  110. completion:((String?, Error?) -> Void)? = nil
  111. )->URL?
  112. {
  113. guard let url = URL(string: urlString) else{
  114. completion?(nil, NSError(domain: "url null", code: 0))
  115. return nil
  116. }
  117. if !urlString.contains("http") && urlString.contains("/"){
  118. completion?(urlString.fillCachePath, nil)
  119. return nil
  120. }
  121. let fileManager = FileManager.default
  122. // 获取缓存目录下的 `cacheAll` 文件夹路径
  123. let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first!
  124. let cacheAllDirectory = cachesDirectory.appendingPathComponent(cacheDirectory)
  125. // 创建 `cacheAll` 文件夹(如果不存在)
  126. if !fileManager.fileExists(atPath: cacheAllDirectory.path) {
  127. do {
  128. try fileManager.createDirectory(at: cacheAllDirectory, withIntermediateDirectories: true, attributes: nil)
  129. } catch {
  130. completion?(nil, error)
  131. return nil
  132. }
  133. }
  134. guard let fileName = generateFileName(urlString: urlString,fileEx:fileEx,missingEx: missingEx) else{
  135. completion?(nil, NSError(domain: "url error", code: 0))
  136. return nil
  137. }
  138. let cachedFileURL = cacheAllDirectory.appendingPathComponent(fileName)
  139. return cachedFileURL
  140. }
  141. // //获取 urlstring 本地的缓存 url path
  142. // public static func getCachesURL(
  143. // from urlString: String,
  144. // fileEx:String? = nil,
  145. // missingEx:String? = nil,
  146. // cacheDirectory:String = "cacheAll")->URL?{
  147. //
  148. // if let cachedFileURL = generateCachesURL(
  149. // from: urlString,
  150. // fileEx: fileEx,
  151. // missingEx: missingEx,
  152. // cacheDirectory: cacheDirectory
  153. // ){
  154. // //检查文件是否已存在于缓存中
  155. // if FileManager.default.fileExists(atPath: cachedFileURL.path) {
  156. // print("文件已存在于缓存中: \(cachedFileURL)")
  157. // return cachedFileURL
  158. // }
  159. // }
  160. //
  161. // return nil
  162. // }
  163. }