customUploadOperation.m 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. //
  2. // customUploadOperation.m
  3. // Private-X
  4. //
  5. // Created by xd h on 2024/8/27.
  6. //
  7. #import "customUploadOperation.h"
  8. //#define Kboundary2 @"Boundaryhxd"
  9. //#define KNewLine2 [@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]
  10. @implementation customUploadOperation
  11. #pragma mark 分段读视频文件
  12. -(NSData*)cutVideoFileFunAtIndex:(NSUInteger)dataIndex withMaxLenght:(NSInteger)maxLengt{
  13. HLog(@"视频切片开始 线程:%@",[NSThread currentThread]);
  14. uploadFileDataModel *dataModel = _fileModel;
  15. NSString *filePath = _filePath;
  16. if(!filePath || filePath.length == 0){
  17. filePath = [cachesFileManager getFilePathWithName:dataModel.filename type:uploadFileTypeVideo]; // 文件路径
  18. }
  19. NSFileManager *manager0 = [NSFileManager defaultManager];;
  20. if(![manager0 fileExistsAtPath:filePath]) {
  21. return [NSData new];
  22. }
  23. NSFileHandle *fileHandle = _fileHandle;
  24. if(!fileHandle){
  25. fileHandle = [NSFileHandle fileHandleForReadingAtPath:filePath]; // 创建文件句柄
  26. _fileHandle = fileHandle;
  27. }
  28. // 设置分段读取的大小,这里以每次读取1KB为例
  29. const NSUInteger chunkSize = maxLengt;//cutVideoPieceSzie;//5 * 1024 *1024;
  30. NSMutableData *data = [NSMutableData data];
  31. if (fileHandle) {
  32. long long endOfFile = [fileHandle seekToEndOfFile];
  33. if(dataModel.totalBytes == 0
  34. || dataModel.totalBytes < endOfFile){//异常处理
  35. dataModel.totalBytes = endOfFile;
  36. }
  37. //异常处理
  38. if(endOfFile == dataIndex){
  39. dataModel.totalBytes = endOfFile;
  40. dataModel.didUploadBytes = endOfFile;
  41. dataModel.curUploadStateType = uploadStateDone;
  42. [fileHandle closeFile];
  43. _fileHandle = nil;
  44. return data;
  45. }
  46. if (endOfFile >= chunkSize) {
  47. // 读取文件的分段数据到某个位置
  48. [fileHandle seekToFileOffset:dataIndex];
  49. // 读取文件的分段数据
  50. NSData* chunk = [fileHandle readDataOfLength:chunkSize];
  51. if (chunk) {
  52. [data appendData:chunk];
  53. }
  54. }
  55. else{
  56. // 读取文件的分段数据到某个位置
  57. [fileHandle seekToFileOffset:dataIndex];
  58. [data appendData:[fileHandle readDataToEndOfFile]];
  59. // 关闭文件句柄
  60. [fileHandle closeFile];
  61. _fileHandle = nil;
  62. }
  63. }
  64. HLog(@"视频切片完成 dataIndex:%ld --长度:%ld",dataIndex,[data length])
  65. return data;
  66. }
  67. - (void)closeFileHandleFun
  68. {
  69. if(_fileHandle){
  70. [_fileHandle closeFile];
  71. _fileHandle = nil;
  72. }
  73. }
  74. @end