Browse Source

全选上传完成

huangxiaodong 2 years ago
parent
commit
72d2b3d1b4

+ 4 - 2
创维盒子/双子星云手机/Class/Set/uploadFile/PhotoPreviewViewController.m

@@ -110,7 +110,8 @@
             [[PHImageManager defaultManager] requestImageDataForAsset:model.asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
                     // 直接得到最终的 NSData 数据
                     if (imageData) {
-                        model.imageData = imageData;
+                        //model.imageData = imageData;
+                        model.totalBytes = [imageData length];
                     }
                 if(model.type != TZAssetModelMediaTypeVideo){
                     [self setDataToBottomViewFun];
@@ -131,7 +132,8 @@
 //                        NSLog(@"size is %f",[size floatValue]/(1024.0*1024.0));
                      
                         
-                        model.videoData = videoData;
+                        //model.videoData = videoData;
+                        model.totalBytes = [videoData length];
                         [self setDataToBottomViewFun];
                  }
                 }];

+ 1 - 1
创维盒子/双子星云手机/Class/Set/uploadFile/model/TZAssetModel+imageData.h

@@ -14,7 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
 @interface TZAssetModel (imageData)
 @property (nonatomic, retain) NSData *imageData;
 @property (nonatomic, retain) NSData *videoData;
-//@property (nonatomic, assign)  long totalBytes;//总字节数
+@property (nonatomic, assign)  long totalBytes;//总字节数
 @end
 
 NS_ASSUME_NONNULL_END

+ 8 - 8
创维盒子/双子星云手机/Class/Set/uploadFile/model/TZAssetModel+imageData.m

@@ -24,13 +24,13 @@
     return objc_getAssociatedObject(self, @selector(videoData));
 }
 
-//static const NSString* ReplacedKeyWhenCreatingKeyValuesKey = @"totalBytes";
-//
-//- (void)setTotalBytes:(long)totalBytes {
-//    objc_setAssociatedObject(self, @selector(totalBytes), ReplacedKeyWhenCreatingKeyValuesKey, OBJC_ASSOCIATION_ASSIGN);
-//}
-//- (long)totalBytes {
-//    return objc_getAssociatedObject(self, @selector(ReplacedKeyWhenCreatingKeyValuesKey));
-//}
+
+- (void)setTotalBytes:(long)totalBytes {
+    objc_setAssociatedObject(self, @selector(totalBytes), @(totalBytes), OBJC_ASSOCIATION_ASSIGN);
+}
+- (long)totalBytes {
+    NSNumber *curNumber = objc_getAssociatedObject(self, @selector(totalBytes));
+    return curNumber.longValue;
+}
 
 @end

+ 3 - 0
创维盒子/双子星云手机/Class/Set/uploadFile/model/uploadFileDataModel.h

@@ -7,6 +7,7 @@
 
 #import "JSONModel.h"
 #import "BGFMDB.h" //添加该头文件,本类就具有了存储功能.
+#import <Photos/Photos.h>
 NS_ASSUME_NONNULL_BEGIN
 
 typedef enum{
@@ -26,6 +27,8 @@ typedef enum{
 //self.fileName = [assetModel.asset valueForKey:@"filename"];
 @interface uploadFileDataModel : JSONModel
 //目前上传用到的字段有
+@property (nonatomic, strong) PHAsset *asset;
+@property (nonatomic, copy) NSString *localIdentifier;
 @property (nonatomic, copy)  NSString *filename;//image or video
 @property (nonatomic, copy)  NSString *videoFirstImageName;
 @property (nonatomic, retain) NSData *_Nullable imageData;//image or video

+ 1 - 1
创维盒子/双子星云手机/Class/Set/uploadFile/model/uploadFileDataModel.m

@@ -12,6 +12,6 @@
  设置不需要存储的属性, 在模型.m文件中实现该函数.
  */
 +(NSArray *)bg_ignoreKeys{
-   return @[@"imageData",@"videoData"];
+   return @[@"imageData",@"videoData",@"asset"];
 }
 @end

+ 8 - 6
创维盒子/双子星云手机/Class/Set/uploadFile/photoView/photoPreViewBottomView.m

@@ -111,12 +111,14 @@
     NSUInteger allImageData = 0;
     
     for (TZAssetModel* model in _indexPathsForSelectedItems) {
-        if(model.type == TZAssetModelMediaTypeVideo){
-            allImageData += [model.videoData length];
-        }
-        else{
-            allImageData += [model.imageData length];
-        }
+//        if(model.type == TZAssetModelMediaTypeVideo){
+//            allImageData += [model.videoData length];
+//        }
+//        else{
+//            allImageData += [model.imageData length];
+//        }
+        
+        allImageData += model.totalBytes;
     }
     
     allImageData /= 1024;

+ 8 - 6
创维盒子/双子星云手机/Class/Set/uploadFile/photoView/uploadFileBottomView.m

@@ -110,12 +110,14 @@
     
     for (TZAssetModel* model in _indexPathsForSelectedItems) {
         
-        if(model.type == TZAssetModelMediaTypeVideo){
-            allImageData += [model.videoData length];
-        }
-        else{
-            allImageData += [model.imageData length];
-        }
+//        if(model.type == TZAssetModelMediaTypeVideo){
+//            allImageData += [model.videoData length];
+//        }
+//        else{
+//            allImageData += [model.imageData length];
+//        }
+        
+        allImageData += model.totalBytes;
         
     }
     

+ 162 - 4
创维盒子/双子星云手机/Class/Set/uploadFile/uploadFileManager/uploadFileManager.m

@@ -6,6 +6,7 @@
 //
 
 #import "uploadFileManager.h"
+#import <AssetsLibrary/AssetsLibrary.h>
 
 @implementation uploadFileManager
 static uploadFileManager * cur_uploadFileShareInstance = nil;
@@ -103,6 +104,9 @@ static uploadFileManager * cur_uploadFileShareInstance = nil;
     
     for (TZAssetModel * model in indexPathsForSelectedItems) {
         uploadFileDataModel * curModel = [uploadFileDataModel new];
+        curModel.asset = model.asset;
+        curModel.localIdentifier = model.asset.localIdentifier;
+        
         curModel.imageData = model.imageData;
         curModel.videoData = model.videoData;
         curModel.filename = [model.asset valueForKey:@"filename"];
@@ -113,17 +117,59 @@ static uploadFileManager * cur_uploadFileShareInstance = nil;
             [cachesFileManager getFileNameWithContent:curModel.videoData fileName:curModel.filename type:uploadFileTypeVideo];
             
             
-            curModel.totalBytes = [model.videoData length];
+            //curModel.totalBytes = [model.videoData length];
+            curModel.totalBytes = model.totalBytes;
             curModel.videoData = [NSData new];//视频文件存储到文件后内存清空
             
             NSString *imgName1 = [curModel.filename stringByReplacingOccurrencesOfString:@"." withString:@"_"];
             curModel.videoFirstImageName = [[NSString alloc] initWithFormat:@"%@.png",imgName1];
-            [cachesFileManager getFileNameWithContent:curModel.imageData fileName:curModel.videoFirstImageName type:uploadFileTypeImage];
+           
+            //第一帧图片
+            [[PHImageManager defaultManager] requestImageDataForAsset:curModel.asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
+                    // 直接得到最终的 NSData 数据
+                    if (imageData) {
+                        curModel.imageData = imageData;
+                        [cachesFileManager getFileNameWithContent:curModel.imageData fileName:curModel.videoFirstImageName type:uploadFileTypeImage];;
+                    }
+            }];
+
+            //真正的视频数据
+            PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
+            options.version = PHVideoRequestOptionsVersionOriginal;
+            [[PHImageManager defaultManager] requestAVAssetForVideo:curModel.asset options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
+                if ([asset isKindOfClass:[AVURLAsset class]]) {
+                    
+                    AVURLAsset* urlAsset = (AVURLAsset*)asset;
+                    NSData *videoData = [NSData dataWithContentsOfURL:urlAsset.URL];
+               
+                    if (videoData) {
+                        curModel.videoData = videoData;
+                        [cachesFileManager getFileNameWithContent:curModel.videoData fileName:curModel.filename type:uploadFileTypeVideo];
+                        curModel.videoData = nil;
+                    }
+             }
+            }];
+
         }
         else{
             curModel.curUploadFileType = uploadFileTypeImage;
-            [cachesFileManager getFileNameWithContent:curModel.imageData fileName:curModel.filename type:uploadFileTypeImage];
-            curModel.totalBytes = [model.imageData length];
+            curModel.totalBytes = model.totalBytes;
+            
+            if(curModel.imageData)
+            {
+                [cachesFileManager getFileNameWithContent:curModel.imageData fileName:curModel.filename type:uploadFileTypeImage];
+            }
+            else{
+                
+                [[PHImageManager defaultManager] requestImageDataForAsset:curModel.asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
+                        // 直接得到最终的 NSData 数据
+                        if (imageData) {
+                            curModel.imageData = imageData;
+                            [cachesFileManager getFileNameWithContent:curModel.imageData fileName:curModel.filename type:uploadFileTypeImage];;
+                        }
+                }];
+            }
+           
         }
         
         
@@ -213,6 +259,118 @@ static uploadFileManager * cur_uploadFileShareInstance = nil;
         return;
     }
     
+    
+    if(_curUploadFileDataModel.curUploadFileType == uploadFileTypeImage){
+        NSString*pathStr = [cachesFileManager getFilePathWithName:_curUploadFileDataModel.filename type:_curUploadFileDataModel.curUploadFileType];
+        _curUploadFileDataModel.imageData = [NSData dataWithContentsOfFile:pathStr];
+        
+        if(_curUploadFileDataModel.imageData && _curUploadFileDataModel.imageData.length >0){
+            
+            [[NSNotificationCenter defaultCenter] postNotificationName:uploadFileBeginNotification object:_curUploadFileDataModel];
+            return;
+        }
+        
+    }
+    else{
+        NSString*pathStr = [cachesFileManager getFilePathWithName:_curUploadFileDataModel.filename type:uploadFileTypeVideo];
+        NSData *curdata = [NSData dataWithContentsOfFile:pathStr];
+        
+        if(curdata && curdata.length >0){
+            curdata = nil;
+            
+            [[NSNotificationCenter defaultCenter] postNotificationName:uploadFileBeginNotification object:_curUploadFileDataModel];
+            return;
+        }
+    }
+    
+    
+    if(!_curUploadFileDataModel.asset){
+        NSString *curLocalIdentifier = _curUploadFileDataModel.localIdentifier;
+        PHFetchResult *fetchResult = [PHAsset fetchAssetsWithLocalIdentifiers:@[curLocalIdentifier] options:nil];
+        PHAsset *asset = fetchResult.firstObject;
+        _curUploadFileDataModel.asset = asset;
+    }
+    
+    if(!_curUploadFileDataModel.asset){
+        [self getDataWrongToChangeFailFun];
+        return;
+    }
+    
+    KWeakSelf
+    if(_curUploadFileDataModel.curUploadFileType == uploadFileTypeImage)
+    {
+        if(!_curUploadFileDataModel.imageData || _curUploadFileDataModel.imageData.length == 0){
+            [[PHImageManager defaultManager] requestImageDataForAsset:_curUploadFileDataModel.asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
+                    // 直接得到最终的 NSData 数据
+                    if (imageData) {
+                        self->_curUploadFileDataModel.imageData = imageData;
+                        [weakSelf  afterGetImageDataFun];
+                    }
+                    else{
+                        [weakSelf getDataWrongToChangeFailFun];
+                    }
+            }];
+        }
+    }
+    else if(_curUploadFileDataModel.curUploadFileType == uploadFileTypeVideo){
+        
+        //第一帧图片
+        [[PHImageManager defaultManager] requestImageDataForAsset:_curUploadFileDataModel.asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
+                // 直接得到最终的 NSData 数据
+                if (imageData) {
+                    self->_curUploadFileDataModel.imageData = imageData;
+                    [weakSelf  afterGetImageDataInVideoFun];
+                }
+        }];
+
+        //真正的视频数据
+        PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
+        options.version = PHVideoRequestOptionsVersionOriginal;
+        [[PHImageManager defaultManager] requestAVAssetForVideo:_curUploadFileDataModel.asset options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
+            if ([asset isKindOfClass:[AVURLAsset class]]) {
+                
+                AVURLAsset* urlAsset = (AVURLAsset*)asset;
+                NSData *videoData = [NSData dataWithContentsOfURL:urlAsset.URL];
+           
+                if (videoData) {
+                    self->_curUploadFileDataModel.videoData = videoData;
+                    [weakSelf  afterGetVideoDataFun];
+                }
+                else{
+                    [weakSelf getDataWrongToChangeFailFun];
+                }
+         }
+        }];
+
+    }
+}
+
+#pragma mark 获取数据失败 报错
+- (void)getDataWrongToChangeFailFun
+{
+    [self changeUploadFileState:uploadStateFail withDidUploadBytes:_curUploadFileDataModel.didUploadBytes withModel:_curUploadFileDataModel complete:^(BOOL isSuccess) {
+    }];
+}
+
+#pragma mark 根据 asset 获取到图片数据
+- (void)afterGetImageDataFun
+{
+    [cachesFileManager getFileNameWithContent:_curUploadFileDataModel.imageData fileName:_curUploadFileDataModel.filename type:uploadFileTypeImage];
+    
+    [[NSNotificationCenter defaultCenter] postNotificationName:uploadFileBeginNotification object:_curUploadFileDataModel];
+}
+
+- (void)afterGetImageDataInVideoFun
+{
+    [cachesFileManager getFileNameWithContent:_curUploadFileDataModel.imageData fileName:_curUploadFileDataModel.videoFirstImageName type:uploadFileTypeImage];
+}
+
+- (void)afterGetVideoDataFun
+{
+    [cachesFileManager getFileNameWithContent:_curUploadFileDataModel.videoData fileName:_curUploadFileDataModel.filename type:uploadFileTypeVideo];
+    
+    _curUploadFileDataModel.videoData = nil;
+    
     [[NSNotificationCenter defaultCenter] postNotificationName:uploadFileBeginNotification object:_curUploadFileDataModel];
 }
 

+ 5 - 3
创维盒子/双子星云手机/Class/Set/uploadFile/uploadImageOrVideoViewController.m

@@ -480,12 +480,13 @@
     [self.indexPathsForSelectedItems addObject:model];
     model.isSelected = YES;
     
-    if(!model.imageData)
+    if(!model.totalBytes)
     {
         [[PHImageManager defaultManager] requestImageDataForAsset:model.asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
                 // 直接得到最终的 NSData 数据
                 if (imageData) {
-                    model.imageData = imageData;
+                    //model.imageData = imageData;
+                    model.totalBytes = [imageData length];
                 }
             if(model.type != TZAssetModelMediaTypeVideo){
                 [self setDataToBottomViewFun];
@@ -506,7 +507,8 @@
 //                        NSLog(@"size is %f",[size floatValue]/(1024.0*1024.0));
                  
                     
-                    model.videoData = videoData;
+                    //model.videoData = videoData;
+                    model.totalBytes = [videoData length];
                     [self setDataToBottomViewFun];
              }
             }];