OOCloudStorageAPI.swift 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. //
  2. // OOCloudStorageAPI.swift
  3. // o2app
  4. //
  5. // Created by 刘振兴 on 2017/12/7.
  6. // Copyright © 2017年 zone. All rights reserved.
  7. //
  8. import Foundation
  9. import Moya
  10. import O2OA_Auth_SDK
  11. // MARK:- 所有调用的API枚举
  12. enum OOCloudStorageAPI {
  13. //新版
  14. case listTop
  15. case listFolderTop
  16. case listByFolder(String)
  17. case listFolderByFolder(String)
  18. case createFolder(String, String)
  19. case getFile(String)
  20. // folderId, fileName , file
  21. case uploadFile(String, String, Data)
  22. //fileId, file
  23. case updateFile(String, OOAttachment)
  24. //folderId folder
  25. case updateFolder(String, OOFolder)
  26. case deleteFolder(String)
  27. case deleteFile(String)
  28. //分享
  29. case share(OOShareForm)
  30. //分类查询 分页 type: String, page: Int, count: Int
  31. case listTypeByPage(String, Int, Int)
  32. case downloadFile(OOAttachment)
  33. //fileType = attachment | folder
  34. case shareToMe(String)
  35. //fileType = attachment | folder
  36. case myShareList(String)
  37. case shareFileListWithFolderId(String, String)
  38. case shareFolderListWithFolderId(String, String)
  39. case shieldShare(String)
  40. case deleteMyShare(String)
  41. //老版
  42. //获取当前人员顶层文件夹 - jaxrs/complex/folder/##id##
  43. case listFolder(String)
  44. //jaxrs/share/list
  45. case listMyShare
  46. //jaxrs/editor/list
  47. case listMyEditor
  48. //jaxrs/attachment/{id}
  49. case listMyShareByPerson(String)
  50. case listMyEditorByPerson(String)
  51. case getPicItemURL(String)
  52. case getAttachment(String)
  53. // jaxrs/attachment/{id}/download/stream
  54. case downloadAttachment(OOAttachment)
  55. //*
  56. case deleteAttachement(String)
  57. case renameAttachment(String)
  58. case uploadAttachment(String?)
  59. }
  60. // MARK:- 上下文实现
  61. extension OOCloudStorageAPI:OOAPIContextCapable {
  62. var apiContextKey: String {
  63. return "x_file_assemble_control"
  64. }
  65. }
  66. // MARK: - 是否需要加入x-token访问头
  67. extension OOCloudStorageAPI:OOAccessTokenAuthorizable {
  68. public var shouldAuthorize: Bool {
  69. return true
  70. }
  71. }
  72. // MARK: - MoyaAPI实现
  73. extension OOCloudStorageAPI:TargetType{
  74. var baseURL: URL {
  75. let model = O2AuthSDK.shared.o2APIServer(context: .x_file_assemble_control)
  76. let baseURLString = "\(model?.httpProtocol ?? "http")://\(model?.host ?? ""):\(model?.port ?? 0)\(model?.context ?? "")"
  77. return URL(string: baseURLString)!
  78. }
  79. var path: String {
  80. switch self {
  81. case .listTop:
  82. return "/jaxrs/attachment2/list/top"
  83. case .listFolderTop:
  84. return "/jaxrs/folder2/list/top"
  85. case .listByFolder(let folderId):
  86. return "/jaxrs/attachment2/list/folder/\(folderId)"
  87. case .listFolderByFolder(let folderId):
  88. return "/jaxrs/folder2/list/\(folderId)"
  89. case .createFolder(_, _):
  90. return "/jaxrs/folder2"
  91. case .uploadFile(let folderId, _, _):
  92. return "/jaxrs/attachment2/upload/folder/\(folderId)"
  93. case .updateFile(let fileId, _), .deleteFile(let fileId):
  94. return "/jaxrs/attachment2/\(fileId)"
  95. case .getFile(let fileId):
  96. return "jaxrs/attachment2/\(fileId)"
  97. case .updateFolder(let folderId, _), .deleteFolder(let folderId):
  98. return "/jaxrs/folder2/\(folderId)"
  99. case .share(_):
  100. return "/jaxrs/share"
  101. case .listTypeByPage(_, let page, let count):
  102. return "/jaxrs/attachment2/list/type/\(page)/size/\(count)"
  103. case .downloadFile(let file):
  104. return "/jaxrs/attachment2/\(file.id!)/download/stream"
  105. case .shareToMe(let fileType):
  106. return "/jaxrs/share/list/to/me2/\(fileType)"
  107. case .myShareList(let fileType):
  108. return "/jaxrs/share/list/my2/member/\(fileType)"
  109. case .shareFolderListWithFolderId(let shareId, let folderId):
  110. return "/jaxrs/share/list/folder/share/\(shareId)/folder/\(folderId)/"
  111. case .shareFileListWithFolderId(let shareId, let folderId):
  112. return "/jaxrs/share/list/att/share/\(shareId)/folder/\(folderId)/"
  113. case .shieldShare(let shareId):
  114. return "/jaxrs/share/shield/\(shareId)"
  115. case .deleteMyShare(let shareId):
  116. return "/jaxrs/share/\(shareId)"
  117. case .listFolder(let folderId):
  118. return "/jaxrs/complex/folder/\(folderId)"
  119. case .listMyShare:
  120. return "/jaxrs/share/list"
  121. case .listMyEditor:
  122. return "/jaxrs/editor/list"
  123. case .listMyShareByPerson(let personId):
  124. return "/jaxrs/attachment/list/share/\(personId)"
  125. case .listMyEditorByPerson(let personId):
  126. return "/jaxrs/attachment/list/editor/\(personId)"
  127. case .getAttachment(let attachmentId),.deleteAttachement(let attachmentId),.renameAttachment(let attachmentId):
  128. return "/jaxrs/attachment/\(attachmentId)"
  129. case .getPicItemURL(let id):
  130. return "\(self.baseURL.absoluteString)/jaxrs/file/\(id)/download/stream"
  131. case .downloadAttachment(let attachment):
  132. return "/jaxrs/attachment/\(attachment.id!)/download/stream"
  133. case .uploadAttachment(let folderId):
  134. if folderId == nil {
  135. return "jaxrs/attachment/upload"
  136. }else{
  137. return "jaxrs/attachment/upload/folder/\(folderId!)"
  138. }
  139. }
  140. }
  141. var method: Moya.Method {
  142. switch self {
  143. case .listTop, .listFolderTop, .listByFolder(_), .listFolderByFolder(_), .downloadFile(_), .getFile(_):
  144. return .get
  145. case .listFolder(_), .shareToMe(_), .myShareList(_), .shareFileListWithFolderId(_, _), .shareFolderListWithFolderId(_, _), .shieldShare(_):
  146. return .get
  147. case .listMyShare:
  148. return .get
  149. case .listMyEditor:
  150. return .get
  151. case .listMyShareByPerson(_):
  152. return .get
  153. case .listMyEditorByPerson(_):
  154. return .get
  155. case .getAttachment(_):
  156. return .get
  157. case .getPicItemURL(_):
  158. return .get
  159. case .deleteAttachement(_), .updateFolder(_, _), .updateFile(_, _):
  160. return .put
  161. case .uploadAttachment(_), .downloadAttachment(_),
  162. .renameAttachment(_), .createFolder(_, _), .uploadFile(_,_,_), .share(_),.listTypeByPage(_, _, _):
  163. return .post
  164. case .deleteFolder(_), .deleteFile(_), .deleteMyShare(_):
  165. return .delete
  166. }
  167. }
  168. var sampleData: Data {
  169. return "".data(using: String.Encoding.utf8)!
  170. }
  171. var task: Task {
  172. switch self {
  173. case .listFolderByFolder(_), .listByFolder(_), .listTop,.listFolderTop,.listFolder(_),.listMyEditorByPerson(_),.listMyShareByPerson(_),
  174. .listMyEditor,.listMyShare,.getAttachment(_),.deleteAttachement(_),.getPicItemURL(_), .deleteFolder(_), .deleteFile(_),
  175. .getFile(_), .shareFileListWithFolderId(_, _), .shareFolderListWithFolderId(_, _):
  176. return .requestPlain
  177. case .shareToMe(_):
  178. return .requestPlain
  179. case .myShareList(_), .deleteMyShare(_), .shieldShare(_):
  180. return .requestPlain
  181. case .downloadFile(let attachment):
  182. let myDest = getDownDest(attachment)
  183. return .downloadDestination(myDest)
  184. case .downloadAttachment(let attachment):
  185. let myDest = getDownDest(attachment)
  186. return .downloadDestination(myDest)
  187. case .renameAttachment(_):
  188. return .requestPlain
  189. case .uploadAttachment(_):
  190. return .requestPlain
  191. //新接口
  192. case .createFolder(let name, let superior):
  193. return .requestParameters(parameters: ["name":name, "superior": superior], encoding: JSONEncoding.default)
  194. case .uploadFile(_, let fileName, let data):
  195. //字符串类型 文件名
  196. let strData = fileName.data(using: .utf8)
  197. let fileNameData = MultipartFormData(provider: .data(strData!), name: "fileName")
  198. //文件类型
  199. let fileData = MultipartFormData(provider: .data(data), name: "file", fileName: fileName)
  200. return .uploadMultipart([fileData, fileNameData])
  201. case .updateFolder(_, let folder):
  202. return .requestParameters(parameters: folder.toJSON()!, encoding: JSONEncoding.default)
  203. case .updateFile(_, let file):
  204. return .requestParameters(parameters: file.toJSON()!, encoding: JSONEncoding.default)
  205. case .share(let form):
  206. return .requestParameters(parameters: form.toJSON()!, encoding: JSONEncoding.default)
  207. case .listTypeByPage(let type, _, _):
  208. return .requestParameters(parameters: ["fileType": type], encoding: JSONEncoding.default)
  209. }
  210. }
  211. var headers: [String : String]? {
  212. return nil
  213. }
  214. func getDownDest(_ attachment:OOAttachment) -> DownloadDestination {
  215. let myDest:DownloadDestination = { temporaryURL, response in
  216. let fileURL = O2CloudFileManager.shared.cloudFileLocalPath(file: attachment)
  217. return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
  218. }
  219. return myDest
  220. }
  221. }