|
@@ -157,14 +157,20 @@
|
|
|
//每次从文件重新切一片 传一片
|
|
|
-(void)beginGotoUploadVidelFun:(NSNumber*)fileLengthNum{
|
|
|
|
|
|
-// NSData *data = [self cutVideoFileFunAtIndex:0];
|
|
|
-// HLog(@"data leng:%ld",[data length]);
|
|
|
-// return;
|
|
|
-
|
|
|
- NSString*videoPathStr = [cachesFileManager getFilePathWithName:self.curUploadFileDataMod.filename type:uploadFileTypeVideo];
|
|
|
- self.AllFileData = [NSData dataWithContentsOfFile:videoPathStr];
|
|
|
+ NSData *data = [self cutVideoFileFunAtIndex:fileLengthNum.longLongValue];
|
|
|
+ HLog(@"data leng:%ld",[data length]);
|
|
|
+
|
|
|
+ self.AllFileData = data;
|
|
|
+ self.cutFileDataArr = [self fileCutPartsBy:self.AllFileData withDidUpLoadSize:0];
|
|
|
+ self.indexOfUploadFlie = 0;
|
|
|
+ HLog(@"data leng:%ld",[data length]);
|
|
|
|
|
|
- self.cutFileDataArr = [self fileCutPartsBy:self.AllFileData withDidUpLoadSize:[fileLengthNum integerValue]];
|
|
|
+ //return;
|
|
|
+
|
|
|
+// NSString*videoPathStr = [cachesFileManager getFilePathWithName:self.curUploadFileDataMod.filename type:uploadFileTypeVideo];
|
|
|
+// self.AllFileData = [NSData dataWithContentsOfFile:videoPathStr];
|
|
|
+
|
|
|
+ // self.cutFileDataArr = [self fileCutPartsBy:self.AllFileData withDidUpLoadSize:[fileLengthNum integerValue]];
|
|
|
|
|
|
if(!self.cutFileDataArr){
|
|
|
[self clearUploadFileDataFun];
|
|
@@ -196,17 +202,17 @@
|
|
|
NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:filePath]; // 创建文件句柄
|
|
|
|
|
|
// 设置分段读取的大小,这里以每次读取1KB为例
|
|
|
- const NSUInteger chunkSize = 20 * 1024 *1024;
|
|
|
+ const NSUInteger chunkSize = 50 * 1024 *1024;
|
|
|
NSMutableData *data = [NSMutableData data];
|
|
|
|
|
|
if (fileHandle) {
|
|
|
-
|
|
|
- // 读取文件的分段数据到某个位置
|
|
|
- if(dataIndex > 0){
|
|
|
+
|
|
|
+ long long endOfFile = [fileHandle seekToEndOfFile];
|
|
|
+ if (endOfFile >= chunkSize) {
|
|
|
+
|
|
|
+ // 读取文件的分段数据到某个位置
|
|
|
[fileHandle seekToFileOffset:dataIndex];
|
|
|
- }
|
|
|
-
|
|
|
- if ([fileHandle seekToEndOfFile] >= [data length]) {
|
|
|
+
|
|
|
// 读取文件的分段数据
|
|
|
NSData* chunk = [fileHandle readDataOfLength:chunkSize];
|
|
|
if (chunk) {
|
|
@@ -214,6 +220,9 @@
|
|
|
}
|
|
|
}
|
|
|
else{
|
|
|
+ // 读取文件的分段数据到某个位置
|
|
|
+ [fileHandle seekToFileOffset:dataIndex];
|
|
|
+
|
|
|
[data appendData:[fileHandle readDataToEndOfFile]];
|
|
|
}
|
|
|
|
|
@@ -248,7 +257,14 @@
|
|
|
[[uploadFileManager shareInstance] uploadFileFailFun];
|
|
|
|
|
|
}else if ([status isEqualToString:@"0"]){
|
|
|
- [self handleUploadingFun];
|
|
|
+
|
|
|
+ NSNumber * fileLengthNum = @0;
|
|
|
+ if ([[data allKeys] containsObject:@"fileLenth"])
|
|
|
+ {
|
|
|
+ fileLengthNum = data[@"fileLenth"];
|
|
|
+ }
|
|
|
+
|
|
|
+ [self handleUploadingFun:fileLengthNum];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -295,7 +311,7 @@
|
|
|
}
|
|
|
|
|
|
#pragma mark 处理上传过程
|
|
|
-- (void)handleUploadingFun
|
|
|
+- (void)handleUploadingFun:(NSNumber*)fileLengthNum
|
|
|
{
|
|
|
if(self.isSuspendUploadType){
|
|
|
//暂停
|
|
@@ -310,7 +326,8 @@
|
|
|
|
|
|
if(self.indexOfUploadFlie < self.cutFileDataArr.count -1) {
|
|
|
|
|
|
- NSInteger didUploadSize = (self.indexOfUploadFlie+1) * (self.cutFileEachPieceSzie);
|
|
|
+ //NSInteger didUploadSize = (self.indexOfUploadFlie+1) * (self.cutFileEachPieceSzie);
|
|
|
+ NSInteger didUploadSize = fileLengthNum.longLongValue;
|
|
|
|
|
|
[[uploadFileManager shareInstance] changeUploadFileState:uploadStateUploading withDidUploadBytes:didUploadSize withModel:self.curUploadFileDataMod complete:^(BOOL isSuccess) {
|
|
|
|
|
@@ -319,6 +336,11 @@
|
|
|
self.indexOfUploadFlie ++;
|
|
|
[self upLoadFileFun];
|
|
|
}
|
|
|
+ else if(self.curUploadFileDataMod.curUploadFileType == uploadFileTypeVideo && fileLengthNum && fileLengthNum.longLongValue < self.curUploadFileDataMod.totalBytes){
|
|
|
+ //视频做了二次切割 不一定上传完了
|
|
|
+ HLog(@"视频上传传完一片 再来一片");
|
|
|
+ [self beginGotoUploadVidelFun:fileLengthNum];
|
|
|
+ }
|
|
|
else{
|
|
|
HLog(@"上传完成");
|
|
|
|
|
@@ -356,8 +378,9 @@
|
|
|
|
|
|
NSUInteger allLength = data.length;
|
|
|
|
|
|
- NSUInteger subs = 100*1024;//4096;//要切片的大小,我这里设置的是4096字节
|
|
|
- //NSUInteger subs = 8*1024;//4096;//要切片的大小,我这里设置的是4096字节
|
|
|
+ //NSUInteger subs = 100*1024;//4096;//要切片的大小,我这里设置的是4096字节
|
|
|
+ NSUInteger subs = 31*1024;//4096;//要切片的大小,内存没有暴增
|
|
|
+
|
|
|
self.cutFileEachPieceSzie = subs;
|
|
|
|
|
|
NSInteger index = 0;//起始位置
|
|
@@ -378,30 +401,29 @@
|
|
|
NSMutableArray *dataArray =[NSMutableArray new];
|
|
|
|
|
|
do {
|
|
|
-
|
|
|
- if (allLength>subs) {
|
|
|
-
|
|
|
- NSRange range =NSMakeRange(index*subs, subs);
|
|
|
-
|
|
|
- index++;
|
|
|
-
|
|
|
- //NSLog(@"%@",NSStringFromRange(range));
|
|
|
-
|
|
|
- [dataArray addObject:[data subdataWithRange:range]];
|
|
|
-
|
|
|
- allLength = allLength - subs;
|
|
|
-
|
|
|
- }else{
|
|
|
-
|
|
|
- NSRange range = NSMakeRange(index*subs, allLength);
|
|
|
-
|
|
|
- //NSLog(@"%@",NSStringFromRange(range));
|
|
|
-
|
|
|
- [dataArray addObject:[data subdataWithRange:range]];
|
|
|
-
|
|
|
- allLength = 0;
|
|
|
+ @autoreleasepool {
|
|
|
+ if (allLength>subs) {
|
|
|
+
|
|
|
+ NSRange range =NSMakeRange(index*subs, subs);
|
|
|
+
|
|
|
+ index++;
|
|
|
+
|
|
|
+ //NSLog(@"%@",NSStringFromRange(range));
|
|
|
+
|
|
|
+ [dataArray addObject:[data subdataWithRange:range]];
|
|
|
+
|
|
|
+ allLength = allLength - subs;
|
|
|
+
|
|
|
+ }else{
|
|
|
+ NSRange range = NSMakeRange(index*subs, allLength);
|
|
|
+
|
|
|
+ //NSLog(@"%@",NSStringFromRange(range));
|
|
|
+
|
|
|
+ [dataArray addObject:[data subdataWithRange:range]];
|
|
|
+
|
|
|
+ allLength = 0;
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
|
|
|
} while (allLength>0);
|
|
|
|