GBaseNetApi.m 28 KB

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