CWUploadTask+CheckInfo.m 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. //
  2. // CWUploadTask+CheckInfo.m
  3. // uploadFileDemo
  4. //
  5. // Created by hyjet on 2018/3/9.
  6. // Copyright © 2018年 uploadFileDemo. All rights reserved.
  7. //
  8. #import "CWUploadTask+CheckInfo.h"
  9. #import "CWFileStreamSeparation.h"
  10. #define CURRENT_API @""
  11. #define GETPOSTFLOWCHUNKAPI @"/nextcloud/index.php/apps/rcapi/ajax/upload.php"/*断点续传*/
  12. @implementation CWUploadTask (CheckInfo)
  13. - (void)checkParamFromServer:(CWFileStreamSeparation *_Nonnull)fileStream paramCallback:(void(^ _Nullable)(NSString *_Nonnull chunkNumName,NSDictionary *_Nullable param))paramBlock
  14. {
  15. HLog(@"del 2024525 暂未做");
  16. /* hxd del 2024525 暂未做
  17. HLog(@"GET之前——--文件名:%@ 已上传完进度:%.2f 上传状态:%ld", fileStream.fileName, fileStream.progressRate, fileStream.fileStatus);
  18. // HLog(@"IP地址:%@", [iPhone phoneDeviceIPAddress]);
  19. /// 请求URL
  20. NSDictionary *dictLogin = [[UseAccountManage shareInstance] getLoginInfo];
  21. NSString *mCloudService = @"";
  22. if (dictLogin && [[dictLogin allKeys] containsObject:@"nextCloudIp"])
  23. {
  24. mCloudService = [NSString stringWithFormat:@"http://%@",[dictLogin objectForKey:@"nextCloudIp"]];
  25. }
  26. else
  27. {
  28. return;
  29. }
  30. NSString *urlString = [mCloudService stringByAppendingString:GETPOSTFLOWCHUNKAPI];
  31. for (NSInteger i=0; i<fileStream.streamFragments.count; i++) {
  32. CWStreamFragment *fragment = fileStream.streamFragments[i];
  33. if (fragment.fragmentStatus) { // 已上传
  34. continue;
  35. }else { // 未上传
  36. NSString *flowFilename = fileStream.fileName;
  37. NSString *flowFilenameWithoutPoint = [flowFilename stringByReplacingOccurrencesOfString:@"." withString:@""];
  38. NSString *flowIdentifier = [NSString stringWithFormat:@"%ld-%@", fileStream.fileSize, flowFilenameWithoutPoint];
  39. NSString *flowRelativePath = @"";
  40. if ([fileStream.uploadLocation isEqualToString:@"/"]) {
  41. flowRelativePath = [NSString stringWithFormat:@"%@", flowFilename];
  42. }else {
  43. flowRelativePath = [NSString stringWithFormat:@"%@/%@", fileStream.uploadLocation, flowFilename];
  44. }
  45. /// 请求参数paramsDict
  46. NSMutableDictionary *paramsDict = [[NSMutableDictionary alloc] init];
  47. [paramsDict setValue:@(i+1) forKey:@"flowChunkNumber"]; // 当前第几块
  48. [paramsDict setValue:@(CWStreamFragmentMaxSize) forKey:@"flowChunkSize"]; // 块定义上传大小
  49. [paramsDict setValue:@(fragment.fragmentSize) forKey:@"flowCurrentChunkSize"]; // 当前块大小
  50. [paramsDict setValue:@(fileStream.fileSize) forKey:@"flowTotalSize"]; // 总大小
  51. [paramsDict setValue:flowIdentifier forKey:@"flowIdentifier"]; // 标识符【规则:总大小-文件名+文件后缀】
  52. [paramsDict setValue:flowFilename forKey:@"flowFilename"]; // 文件名
  53. [paramsDict setValue:flowRelativePath forKey:@"flowRelativePath"]; // 文件存储路径
  54. [paramsDict setValue:@(fileStream.streamFragments.count) forKey:@"flowTotalChunks"]; // 块总数
  55. // NSString *args = [iTools getJSONStringFromDictionary:paramsDict];
  56. // HLog(@"GET——URL:%@---params:%@", urlString,paramsDict);
  57. /// 拼接参数
  58. NSString *requestURLString = [NSString stringWithFormat:@"%@?flowChunkNumber=%ld&flowChunkSize=%d&flowCurrentChunkSize=%ld&flowTotalSize=%ld&flowIdentifier=%@&flowFilename=%@&flowRelativePath=%@&flowTotalChunks=%ld", urlString, (i+1), CWStreamFragmentMaxSize, fragment.fragmentSize, fileStream.fileSize, flowIdentifier, flowFilename, flowRelativePath, fileStream.streamFragments.count];
  59. NSString *requestURLEncodedString = [requestURLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // URL中不能有中文
  60. /// 创建请求 设置请求头Authorization
  61. NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:requestURLEncodedString]];
  62. NSString *tokenStr = @"";
  63. if (dictLogin && [[dictLogin allKeys] containsObject:@"token"]) {
  64. tokenStr = [[UseAccountManage shareInstance] cloudAutoh];
  65. if (tokenStr.length == 0) {
  66. HLog(@"POST:未能成功获取到Authorization");
  67. return;
  68. }
  69. }else {
  70. HLog(@"POST:未能成功获取到Authorization");
  71. return;
  72. }
  73. [request setValue:tokenStr forHTTPHeaderField:@"Authorization"];
  74. [request setValue:fileStream.md5String forHTTPHeaderField:@"onlycrypt"]; // 文件MD5值
  75. request.HTTPMethod = @"GET";// 设置请求类型 先GET查询 再POST上传
  76. NSURLSession *session = [NSURLSession sharedSession];
  77. //发送请求
  78. NSURLSessionDataTask *postTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
  79. if (error == nil) {
  80. //解析得到的数据
  81. NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
  82. HLog(@"GET之后:获取断点续传分片信息成功 校验参数 更新paramsDict 返回:%@", dict);
  83. paramBlock(@"flowChunkNumber",paramsDict);
  84. }else {
  85. HLog(@"GET之后:获取断点续传分片信息失败 %@", error);
  86. }
  87. [self clearCookies];
  88. }];
  89. [postTask resume];
  90. break;
  91. }
  92. }
  93. */
  94. }
  95. // 清空Cookie
  96. - (void)clearCookies {
  97. NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
  98. NSArray *cookieArray = [NSArray arrayWithArray:[cookieJar cookies]];
  99. for(id obj in cookieArray)
  100. {
  101. [cookieJar deleteCookie:obj];
  102. }
  103. }
  104. @end