|
|
@@ -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];
|
|
|
}
|
|
|
|