GBaseNetApi.m 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673
  1. //
  2. // GBaseNetApi.m
  3. // TUIContact
  4. //
  5. // Created by gan on 2025/3/24.
  6. //
  7. #import <Foundation/Foundation.h>
  8. #import "GBaseNetApi.h"
  9. #import "AFNetworking.h"
  10. #import "AFNetworkReachabilityManager.h"
  11. #import "UDManager.h"
  12. @implementation GBaseNetApi
  13. + (GBaseNetApi *_Nonnull)shareInstance{
  14. static id gShareInstance = nil;
  15. static dispatch_once_t onceToken;
  16. dispatch_once(&onceToken, ^{
  17. gShareInstance = [[self alloc] init];
  18. });
  19. return gShareInstance;
  20. }
  21. - (instancetype)init {
  22. if (self = [super init]) {
  23. _uploadTanck = [NSMutableArray new];
  24. _downloadTanck =[NSMutableArray new];
  25. }
  26. return self;
  27. }
  28. -(void)httpGet:(nullable id)parameters url:(NSString *)url succ:(GSucc)succ fail:(GFail)fail{
  29. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  30. manager.requestSerializer = [AFJSONRequestSerializer serializer];
  31. NSString *acUrl=@"";
  32. if([url containsString:@"http"]){
  33. acUrl =url;
  34. }
  35. else{
  36. acUrl=[NSString stringWithFormat:@"%@%@",host,url];
  37. }
  38. NSLog(@"%@",acUrl);
  39. [manager GET:acUrl parameters:parameters headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  40. //
  41. if (succ) {
  42. succ(200,responseObject);
  43. }
  44. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  45. //
  46. if (fail) {
  47. fail(error);
  48. }
  49. }];
  50. }
  51. -(void)httpPost:(nullable id)parameters url:(NSString *)url succ:(GSucc)succ fail:(GFail)fail{
  52. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  53. manager.requestSerializer = [AFJSONRequestSerializer serializer];
  54. NSString *acUrl=@"";
  55. if([url containsString:@"http"]){
  56. acUrl =url;
  57. }
  58. else{
  59. acUrl=[NSString stringWithFormat:@"%@%@",host,url];
  60. }
  61. // NSLog(@"%@",acUrl);
  62. // NSLog(@"%@",parameters);
  63. [manager POST:acUrl parameters:parameters headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  64. if (succ) {
  65. succ(200,responseObject);
  66. }
  67. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  68. if (fail) {
  69. fail(error);
  70. }
  71. }];
  72. }
  73. -(void)httpGetToken:(nullable id)parameters url:(NSString *)url succ:(GSucc)succ fail:(GFail)fail{
  74. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  75. manager.requestSerializer = [AFJSONRequestSerializer serializer];
  76. NSString *token = (NSString *)[UDManager.shareInstance getSDManager:gkeytoken];
  77. [manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",token] forHTTPHeaderField:@"Authorization"];
  78. NSString *acUrl=@"";
  79. if([url containsString:@"http"]){
  80. acUrl =url;
  81. }
  82. else{
  83. acUrl=[NSString stringWithFormat:@"%@%@",host,url];
  84. }
  85. NSLog(@"%@",acUrl);
  86. [manager GET:acUrl parameters:parameters headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  87. dispatch_main_async_safe(^{
  88. if (succ) {
  89. succ(200,responseObject);
  90. }
  91. })
  92. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  93. dispatch_main_async_safe(^{
  94. if (fail) {
  95. fail(error);
  96. }
  97. })
  98. }];
  99. }
  100. -(void)httpPostToken:(nullable id)parameters url:(NSString *)url succ:(GSucc)succ fail:(GFail)fail{
  101. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  102. manager.requestSerializer = [AFJSONRequestSerializer serializer];
  103. NSString *token = (NSString *)[UDManager.shareInstance getSDManager:gkeytoken];
  104. [manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",token] forHTTPHeaderField:@"Authorization"];
  105. NSString *acUrl=@"";
  106. if([url containsString:@"http"]){
  107. acUrl =url;
  108. }
  109. else{
  110. acUrl=[NSString stringWithFormat:@"%@%@",host,url];
  111. }
  112. NSLog(@"%@",acUrl);
  113. NSLog(@"%@",parameters);
  114. [manager POST:acUrl parameters:parameters headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  115. if (succ) {
  116. succ(200,responseObject);
  117. }
  118. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  119. if (fail) {
  120. fail(error);
  121. }
  122. }];
  123. }
  124. -(void)httpPutToken:(nullable id)parameters url:(NSString *_Nullable)url succ:(GSucc _Nullable )succ fail:(GFail _Nullable )fail{
  125. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  126. manager.requestSerializer = [AFJSONRequestSerializer serializer];
  127. NSString *token = (NSString *)[UDManager.shareInstance getSDManager:gkeytoken];
  128. [manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",token] forHTTPHeaderField:@"Authorization"];
  129. NSString *acUrl=@"";
  130. if([url containsString:@"http"]){
  131. acUrl =url;
  132. }
  133. else{
  134. acUrl=[NSString stringWithFormat:@"%@%@",host,url];
  135. }
  136. // NSLog(@"%@",acUrl);
  137. // NSLog(@"%@",parameters);
  138. //
  139. [manager PUT:acUrl parameters:parameters headers:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  140. if (succ) {
  141. succ(200,responseObject);
  142. }
  143. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  144. if (fail) {
  145. fail(error);
  146. }
  147. }];
  148. }
  149. -(void)httpPatchToken:(nullable id)parameters url:(NSString *_Nullable)url succ:(GSucc _Nullable )succ fail:(GFail _Nullable )fail{
  150. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  151. manager.requestSerializer = [AFJSONRequestSerializer serializer];
  152. NSString *token = (NSString *)[UDManager.shareInstance getSDManager:gkeytoken];
  153. [manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",token] forHTTPHeaderField:@"Authorization"];
  154. NSString *acUrl=@"";
  155. if([url containsString:@"http"]){
  156. acUrl =url;
  157. }
  158. else{
  159. acUrl=[NSString stringWithFormat:@"%@%@",host,url];
  160. }
  161. NSLog(@"%@",acUrl);
  162. NSLog(@"%@",parameters);
  163. [manager PATCH:acUrl parameters:parameters headers:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  164. if (succ) {
  165. succ(200,responseObject);
  166. }
  167. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  168. if (fail) {
  169. fail(error);
  170. }
  171. }];
  172. }
  173. -(void)httpDelToken:(nullable id)parameters url:(NSString *_Nullable)url succ:(GSucc _Nullable )succ fail:(GFail _Nullable )fail{
  174. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  175. manager.requestSerializer = [AFJSONRequestSerializer serializer];
  176. NSString *token = (NSString *)[UDManager.shareInstance getSDManager:gkeytoken];
  177. [manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",token] forHTTPHeaderField:@"Authorization"];
  178. NSString *acUrl=@"";
  179. if([url containsString:@"http"]){
  180. acUrl =url;
  181. }
  182. else{
  183. acUrl=[NSString stringWithFormat:@"%@%@",host,url];
  184. }
  185. NSLog(@"%@",acUrl);
  186. NSLog(@"%@",parameters);
  187. [manager DELETE:acUrl parameters:parameters headers:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  188. if (succ) {
  189. succ(200,responseObject);
  190. }
  191. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  192. if (fail) {
  193. fail(error);
  194. }
  195. }];
  196. }
  197. -(void)upLoadWToken:(NSURL *_Nonnull)filePath succ:(GSucc _Nullable )succ fail:(GFail _Nullable )fail{
  198. NSData *fileData = [NSData dataWithContentsOfURL:filePath];
  199. NSLog(@"fileData:%lu",(unsigned long)fileData.length);
  200. NSLog(@"filePath.lastPathComponent:%@",filePath.lastPathComponent);
  201. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  202. manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // 确保服务器返回的是原始数据,而非自动解析为JSON等
  203. NSString *token = (NSString *)[UDManager.shareInstance getSDManager:gkeytoken];
  204. [manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",token] forHTTPHeaderField:@"Authorization"];
  205. //[manager.requestSerializer setValue:[NSString stringWithFormat:@"multipart/form-data"] forHTTPHeaderField:@"Content-Type"];
  206. NSString *acUrl=[NSString stringWithFormat:@"%@%@",filehost,@"/common/upload"];
  207. // 上传文件,使用multipart/form-data类型(通常用于文件上传)
  208. [manager POST:acUrl parameters:nil headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
  209. // 参数名称,服务器用来识别是哪个文件被上传
  210. [formData appendPartWithFileData:fileData name:@"file" fileName:filePath.lastPathComponent mimeType:@"multipart/form-data"];
  211. } progress:^(NSProgress * _Nonnull uploadProgress) {
  212. // 上传进度处理
  213. NSLog(@"Percent Done: %lld %@", 100 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount, @" %");
  214. } success:^(NSURLSessionTask * _Nonnull task, id _Nullable responseObject) {
  215. // 上传成功处理
  216. NSString *str =[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
  217. NSLog(@"Success: %@", str);
  218. NSMutableDictionary *jsonDict = [NSMutableDictionary dictionaryWithDictionary:[NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil]];
  219. [jsonDict jk_setObj:[self calculateFileSizeFromData:fileData] forKey:@"size"];
  220. NSLog(@"jsonDict:%@",jsonDict);
  221. if (succ) {
  222. succ(200,jsonDict);
  223. }
  224. } failure:^(NSURLSessionTask * _Nullable task, NSError * _Nonnull error) {
  225. // 上传失败处理
  226. if (fail) {
  227. fail(error);
  228. }
  229. NSLog(@"Error: %@", error);
  230. }];
  231. }
  232. - (void)uploadWithFilePath:(NSURL * )filePath thrid:(NSString *_Nullable)thrid progress:(FUploadProgress _Nullable)progress succ:(FSucc _Nullable )succ fail:(FFail _Nullable )fail{
  233. NSData *fileData = [NSData dataWithContentsOfURL:filePath];
  234. if (!fileData) {
  235. NSLog(@"----------读不到文件---------");
  236. return;
  237. }
  238. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  239. manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // 确保服务器返回的是原始数据,而非自动解析为JSON等
  240. NSString *token = (NSString *)[UDManager.shareInstance getSDManager:gkeytoken];
  241. [manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",token] forHTTPHeaderField:@"Authorization"];
  242. //[manager.requestSerializer setValue:[NSString stringWithFormat:@"multipart/form-data"] forHTTPHeaderField:@"Content-Type"];
  243. NSString *acUrl=[NSString stringWithFormat:@"%@%@",filehost,@"/common/upload"];
  244. NSLog(@"acUrl:%@",acUrl);
  245. NSURLSessionDataTask *uploadTack;
  246. // 上传文件,使用multipart/form-data类型(通常用于文件上传)
  247. uploadTack = [manager POST:acUrl parameters:nil headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
  248. // 参数名称,服务器用来识别是哪个文件被上传
  249. [formData appendPartWithFileData:fileData name:@"file" fileName:filePath.lastPathComponent mimeType:@"multipart/form-data"];
  250. } progress:^(NSProgress * _Nonnull uploadProgress) {
  251. // 上传进度处理
  252. NSLog(@"Percent Done: %lld %@", 100 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount, @" %");
  253. // if (progress) {
  254. // progress(uploadProgress);
  255. // }
  256. progress(thrid,uploadProgress);
  257. } success:^(NSURLSessionTask * _Nonnull task, id _Nullable responseObject) {
  258. // 上传成功处理
  259. [self removeUploadTanckobj:thrid];
  260. NSString *str =[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
  261. NSLog(@"Success: %@", str);
  262. NSMutableDictionary *jsonDict = [NSMutableDictionary dictionaryWithDictionary:[NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil]];
  263. [jsonDict jk_setObj:[self calculateFileSizeFromData:fileData] forKey:@"size"];
  264. // NSLog(@"jsonDict:%@",jsonDict);
  265. if (succ) {
  266. succ(200,thrid,jsonDict);
  267. }
  268. } failure:^(NSURLSessionTask * _Nullable task, NSError * _Nonnull error) {
  269. // 上传失败处理
  270. [self removeUploadTanckobj:thrid];
  271. if (fail) {
  272. fail(thrid,error);
  273. }
  274. NSLog(@"Error: %@", error);
  275. }];
  276. uploadTack.priority = NSURLSessionTaskPriorityLow;
  277. [self addUploadTanckobj:uploadTack thrid:thrid];
  278. }
  279. //OSS返回上传进度的上传方法
  280. - (void)uploadWithFilePathOSS:(NSURL *_Nullable)filePath thrid:(NSString *_Nullable)thrid progress:(FUploadProgress _Nullable )progress succ:(FSucc _Nullable )succ fail:(FFail _Nullable )fail{
  281. if([self isuploadTanck:thrid]){
  282. NSLog(@"---------isuploadTanck:%@",filePath);
  283. return;
  284. }
  285. NSData *fileData = [NSData dataWithContentsOfURL:filePath];
  286. if (!fileData) {
  287. [MBProgressHUD showWithText:@"獲取本地檔案失敗,請重新選擇檔案"];
  288. return;
  289. }
  290. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  291. manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // 确保服务器返回的是原始数据,而非自动解析为JSON等
  292. NSString *token = (NSString *)[UDManager.shareInstance getSDManager:gkeytoken];
  293. [manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",token] forHTTPHeaderField:@"Authorization"];
  294. //[manager.requestSerializer setValue:[NSString stringWithFormat:@"multipart/form-data"] forHTTPHeaderField:@"Content-Type"];
  295. NSString *acUrl=OSSfilehost;
  296. NSLog(@"acUrl:%@",acUrl);
  297. NSURLSessionDataTask *uploadTack;
  298. // 上传文件,使用multipart/form-data类型(通常用于文件上传)
  299. uploadTack = [manager POST:acUrl parameters:nil headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
  300. // 参数名称,服务器用来识别是哪个文件被上传
  301. [formData appendPartWithFileData:fileData name:@"file" fileName:filePath.lastPathComponent mimeType:@"multipart/form-data"];
  302. } progress:^(NSProgress * _Nonnull uploadProgress) {
  303. // 上传进度处理
  304. NSLog(@"Percent Done: %lld %@", 100 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount, @" %");
  305. if (progress) {
  306. progress(thrid,uploadProgress);
  307. }
  308. } success:^(NSURLSessionTask * _Nonnull task, id _Nullable responseObject) {
  309. // 上传成功处理
  310. [self removeUploadTanckobj:thrid];
  311. NSString *str =[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
  312. NSLog(@"Success: %@", str);
  313. NSMutableDictionary *jsonDict = [NSMutableDictionary dictionaryWithDictionary:[NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil]];
  314. [jsonDict jk_setObj:[self calculateFileSizeFromData:fileData] forKey:@"size"];
  315. // NSLog(@"jsonDict:%@",jsonDict);
  316. if (succ) {
  317. succ(200,thrid,jsonDict);
  318. }
  319. } failure:^(NSURLSessionTask * _Nullable task, NSError * _Nonnull error) {
  320. // 上传失败处理
  321. [self removeUploadTanckobj:thrid];
  322. if (fail) {
  323. fail(thrid,error);
  324. }
  325. NSLog(@"Error: %@", error);
  326. }];
  327. uploadTack.priority = NSURLSessionTaskPriorityLow;
  328. [self addUploadTanckobj:uploadTack thrid:thrid];
  329. }
  330. -(void)upLoaddataWToken:(NSData *_Nonnull)data fileName:(NSString *_Nullable)fileName succ:(GSucc _Nullable )succ fail:(GFail _Nullable )fail{
  331. NSLog(@"fileData:%lu",(unsigned long)data.length);
  332. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  333. manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // 确保服务器返回的是原始数据,而非自动解析为JSON等
  334. NSString *token = (NSString *)[UDManager.shareInstance getSDManager:gkeytoken];
  335. [manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",token] forHTTPHeaderField:@"Authorization"];
  336. //[manager.requestSerializer setValue:[NSString stringWithFormat:@"multipart/form-data"] forHTTPHeaderField:@"Content-Type"];
  337. NSString *acUrl=[NSString stringWithFormat:@"%@%@",filehost,@"/common/upload"];
  338. // 上传文件,使用multipart/form-data类型(通常用于文件上传)
  339. [manager POST:acUrl parameters:nil headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
  340. // 参数名称,服务器用来识别是哪个文件被上传
  341. [formData appendPartWithFileData:data name:@"file" fileName:fileName mimeType:@"multipart/form-data"];
  342. } progress:^(NSProgress * _Nonnull uploadProgress) {
  343. // 上传进度处理
  344. NSLog(@"Percent Done: %lld %@", 100 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount, @" %");
  345. } success:^(NSURLSessionTask * _Nonnull task, id _Nullable responseObject) {
  346. // 上传成功处理
  347. NSString *str =[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
  348. NSLog(@"Success: %@", str);
  349. NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil];
  350. NSLog(@"jsonDict:%@",jsonDict);
  351. if (succ) {
  352. succ(200,jsonDict);
  353. }
  354. } failure:^(NSURLSessionTask * _Nullable task, NSError * _Nonnull error) {
  355. // 上传失败处理
  356. if (fail) {
  357. fail(error);
  358. }
  359. NSLog(@"Error: %@", error);
  360. }];
  361. }
  362. - (void)uploadWithFilePath:(NSArray <NSURL *>*)filePaths thrid:(NSString *_Nullable)thrid succ:(FSucc _Nullable )succ fail:(FFail _Nullable )fail{
  363. // 1. 创建AFHTTPSessionManager实例
  364. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  365. manager.requestSerializer = [AFHTTPRequestSerializer serializer];
  366. manager.responseSerializer = [AFJSONResponseSerializer serializer];
  367. NSString *acUrl=[NSString stringWithFormat:@"%@%@",filehost,@"/common/uploads"];
  368. // 2. 创建NSMutableURLRequest
  369. NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST"
  370. URLString:acUrl
  371. parameters:nil
  372. constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
  373. // 3. 遍历所有文件URL并添加到formData
  374. for (NSURL *fileURL in filePaths) {
  375. NSError *error;
  376. NSString *fileName = [fileURL lastPathComponent];
  377. NSString *mimeType = [self mimeTypeForFileAtURL:fileURL];
  378. [formData appendPartWithFileURL:fileURL
  379. name:@"file" // 根据服务器API调整name字段
  380. fileName:fileName
  381. mimeType:mimeType
  382. error:&error];
  383. if (error) {
  384. NSLog(@"Error appending file: %@", error.localizedDescription);
  385. }
  386. }
  387. } error:nil];
  388. // 4. 创建上传任务
  389. NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request
  390. progress:nil
  391. completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
  392. if (error) {
  393. if (fail) {
  394. fail(thrid,error);
  395. }
  396. } else {
  397. NSDictionary * responseDict = (NSDictionary *)responseObject;
  398. NSLog(@"批量上传返回数据:%@",responseObject);
  399. NSLog(@"批量上传返回msg:%@",responseDict[@"msg"]);
  400. }
  401. }];
  402. // 5. 开始上传任务
  403. [uploadTask resume];
  404. }
  405. // 根据文件扩展名获取MIME类型
  406. - (NSString *)mimeTypeForFileAtURL:(NSURL *)fileURL {
  407. NSString *extension = [[fileURL pathExtension] lowercaseString];
  408. if ([extension isEqualToString:@"jpg"] || [extension isEqualToString:@"jpeg"]) {
  409. return @"image/jpeg";
  410. } else if ([extension isEqualToString:@"png"]) {
  411. return @"image/png";
  412. } else if ([extension isEqualToString:@"gif"]) {
  413. return @"image/gif";
  414. } else if ([extension isEqualToString:@"pdf"]) {
  415. return @"application/pdf";
  416. } else if ([extension isEqualToString:@"doc"]) {
  417. return @"application/msword";
  418. } else if ([extension isEqualToString:@"docx"]) {
  419. return @"application/vnd.openxmlformats-officedocument.wordprocessingml.document";
  420. } else if ([extension isEqualToString:@"xls"]) {
  421. return @"application/vnd.ms-excel";
  422. } else if ([extension isEqualToString:@"xlsx"]) {
  423. return @"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
  424. } else if ([extension isEqualToString:@"ppt"]) {
  425. return @"application/vnd.ms-powerpoint";
  426. } else if ([extension isEqualToString:@"pptx"]) {
  427. return @"application/vnd.openxmlformats-officedocument.presentationml.presentation";
  428. } else if ([extension isEqualToString:@"txt"]) {
  429. return @"text/plain";
  430. } else if ([extension isEqualToString:@"mp4"]) {
  431. return @"video/mp4";
  432. } else if ([extension isEqualToString:@"mov"]) {
  433. return @"video/quicktime";
  434. } else {
  435. return @"application/octet-stream";
  436. }
  437. }
  438. -(void)downLoadFileWToken:(NSURL *_Nonnull)url thrid:(NSString *_Nullable)thrid succ:(GSucc _Nullable )succ fail:(GFail _Nullable )fail{
  439. if([self isDownloadTanck:thrid]){
  440. return;
  441. }
  442. NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
  443. AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:config];
  444. NSURLRequest *request = [NSURLRequest requestWithURL:url];
  445. NSURLSessionTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
  446. // NSLog(@"%lld:%lld",downloadProgress.completedUnitCount,downloadProgress.totalUnitCount);
  447. CGFloat progres = downloadProgress.completedUnitCount/(double)downloadProgress.totalUnitCount;
  448. // NSLog(@"1111:%f",progres);
  449. if(succ){
  450. // NSLog(@"222222:%f",progres);
  451. CGFloat Pcode =progres*100;
  452. // NSLog(@"222222:%d",(int)Pcode);
  453. succ(Pcode,nil);
  454. }
  455. } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
  456. NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
  457. NSString *fileName = [response suggestedFilename];
  458. NSString *fileExtension = [fileName pathExtension];
  459. NSString *newfileName = [NSString stringWithFormat:@"%@.%@", thrid,fileExtension];
  460. documentsDirectoryURL = [documentsDirectoryURL URLByAppendingPathComponent:newfileName];
  461. return documentsDirectoryURL;
  462. } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
  463. // NSLog(@"333:%@",filePath);
  464. [self removeDownloadTanckobj:thrid];
  465. if(error){//失败
  466. if(fail){
  467. fail(error);
  468. }
  469. }
  470. else{//成功
  471. if(succ){
  472. NSMutableString *mutableString = [NSMutableString stringWithString:filePath.absoluteString];
  473. // 删除所有 "file://" 字符
  474. [mutableString replaceOccurrencesOfString:@"file://" withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [mutableString length])];
  475. NSString *strp = [NSString stringWithString:mutableString];
  476. NSDictionary *dic = @{
  477. @"filePath":strp
  478. };
  479. succ(200,dic);
  480. }
  481. }
  482. }];
  483. task.priority = NSURLSessionTaskPriorityLow;
  484. [self addDownloadTanckobj:task thrid:thrid];
  485. [task resume];
  486. }
  487. - (NSString *)calculateFileSizeFromData:(NSData *)data {
  488. if (!data) {
  489. return @"0 B";
  490. }
  491. long long bytes = (long long)data.length;
  492. if (bytes < 1024) {
  493. return [NSString stringWithFormat:@"%lld B", bytes];
  494. } else if (bytes < 1024 * 1024) {
  495. float sizeInKB = (float)bytes / 1024;
  496. return [NSString stringWithFormat:@"%.2f KB", sizeInKB];
  497. } else if (bytes < 1024 * 1024 * 1024) {
  498. float sizeInMB = (float)bytes / (1024 * 1024);
  499. return [NSString stringWithFormat:@"%.2f MB", sizeInMB];
  500. } else {
  501. float sizeInGB = (float)bytes / (1024 * 1024 * 1024);
  502. return [NSString stringWithFormat:@"%.2f GB", sizeInGB];
  503. }
  504. }
  505. -(void)addUploadTanckobj:(NSURLSessionDataTask *)task thrid:(NSString *)thrid{
  506. NSDictionary *item = @{
  507. @"task":task,
  508. @"thrid":thrid
  509. };
  510. [_uploadTanck addObject:item];
  511. }
  512. -(BOOL)isuploadTanck:(NSString *)thrid{
  513. NSLog(@"stopUploadTanck-------------2");
  514. if(_uploadTanck.count>0){
  515. for (NSDictionary *item in _uploadTanck) {
  516. NSString *th = item[@"thrid"];
  517. NSLog(@"stopUploadTanck-------------3");
  518. if([th isEqualToString:thrid]){
  519. NSLog(@"stopUploadTanck-------------4");
  520. return true;
  521. }
  522. }
  523. }
  524. return false;
  525. }
  526. -(void)removeUploadTanckobj:(NSString *)thrid{
  527. if(_uploadTanck.count>0){
  528. for (NSDictionary *item in _uploadTanck) {
  529. NSString *th = item[@"thrid"];
  530. if([th isEqualToString:thrid]){
  531. [_uploadTanck removeObject:item];
  532. return;
  533. }
  534. }
  535. }
  536. }
  537. -(void)stopUploadTanck:(NSString *)thrid{
  538. NSLog(@"stopUploadTanck-------------2");
  539. if(_uploadTanck.count>0){
  540. for (NSDictionary *item in _uploadTanck) {
  541. NSString *th = item[@"thrid"];
  542. NSLog(@"stopUploadTanck-------------3");
  543. if([th isEqualToString:thrid]){
  544. NSURLSessionDataTask *task = item[@"task"];
  545. NSLog(@"stopUploadTanck-------------4");
  546. [task cancel];
  547. NSLog(@"stopUploadTanck-------------5");
  548. return;
  549. }
  550. }
  551. }
  552. }
  553. -(void)addDownloadTanckobj:(NSURLSessionTask *)task thrid:(NSString *)thrid{
  554. NSDictionary *item = @{
  555. @"task":task,
  556. @"thrid":thrid
  557. };
  558. [_downloadTanck addObject:item];
  559. }
  560. -(void)removeDownloadTanckobj:(NSString *)thrid{
  561. if(_downloadTanck.count>0){
  562. for (NSDictionary *item in _downloadTanck) {
  563. NSString *th = item[@"thrid"];
  564. if([th isEqualToString:thrid]){
  565. [_downloadTanck removeObject:item];
  566. return;
  567. }
  568. }
  569. }
  570. }
  571. -(BOOL)isDownloadTanck:(NSString *)thrid{
  572. NSLog(@"stopUploadTanck-------------2");
  573. if(_downloadTanck.count>0){
  574. for (NSDictionary *item in _downloadTanck) {
  575. NSString *th = item[@"thrid"];
  576. NSLog(@"stopUploadTanck-------------3");
  577. if([th isEqualToString:thrid]){
  578. NSLog(@"stopUploadTanck-------------4");
  579. return true;
  580. }
  581. }
  582. }
  583. return false;
  584. }
  585. @end