123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454 |
- //
- // JXHttpRequet.m
- // share
- //
- // Created by 1 on 2019/3/21.
- // Copyright © 2019年 Reese. All rights reserved.
- //
- #import "JXHttpRequet.h"
- #import "JXCustomShareVC.h"
- @interface JXHttpRequet ()<JXNetworkDelegate>
- @property (nonatomic, strong) NSString *urlPath;
- @end
- @implementation JXHttpRequet
- static JXHttpRequet *_httpRequet = nil;
- + (instancetype)shareInstance {
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- _httpRequet = [[JXHttpRequet alloc] init];
- });
- return _httpRequet;
- }
- - (instancetype)init {
- if (self = [super init]) {
- self.access_token = [share_defaults objectForKey:kMY_ShareExtensionToken];
- self.userId = [share_defaults objectForKey:kMY_ShareExtensionUserId];
- self.apiUrl = [share_defaults objectForKey:kApiUrl];
- self.uploadUrl = [share_defaults objectForKey:kUploadUrl];
- self.timeDifference = [[share_defaults objectForKey:kShare_timeDifference] doubleValue];
- self.httpKey = [share_defaults objectForKey:kMY_ShareExtensionHttpKey];
- }
- return self;
- }
- //上传文件到服务器(传路径)
- -(void)uploadFile:(NSString*)file validTime:(NSString *)validTime messageId:(NSString *)messageId toView:(id)toView{
- if(!file)
- return;
- if(![[NSFileManager defaultManager] fileExistsAtPath:file])
- return;
-
- JXNetwork* p = [self addTask:act_UploadFile param:nil toView:toView];
- [p setPostValue:self.userId forKey:@"userId"];
- if (!validTime) {
- validTime = @"-1";
- }
- [p setPostValue:validTime forKey:@"validTime"];
- [p setData:[NSData dataWithContentsOfFile:file] forKey:[file lastPathComponent] messageId:nil];
- p.userData = [file lastPathComponent];
- p.messageId = messageId;
- [p go];
- }
- // 发送消息
- - (void)sendMsgToUserId:(NSString *)jid chatType:(int)chatType type:(int)type content:(NSString *)content fileName:(NSString *)fileName toView:(id)toView{
- JXNetwork* p = [self addTask:act_SendMsg param:nil toView:toView];
- [p setPostValue:jid forKey:@"jid"];
- [p setPostValue:[NSNumber numberWithInt:chatType] forKey:@"chatType"];
- [p setPostValue:[NSNumber numberWithInt:type] forKey:@"type"];
- [p setPostValue:content forKey:@"content"];
- [p setPostValue:fileName forKey:@"fileName"];
- [p setPostValue:self.access_token forKey:@"access_token"];
-
- [p go];
- }
- // 发送生活圈
- -(void)addMessage:(NSString*)text type:(int)type data:(NSDictionary*)dict flag:(int)flag toView:(id)toView{
- NSMutableArray* array;
-
- NSString * jsonFiles=nil;
- // NSMutableArray* a=[[NSMutableArray alloc]init];
- SBJsonWriter * OderJsonwriter = [SBJsonWriter new];
-
- array = [dict objectForKey:@"images"];
- NSString * jsonImages = nil;
- if([array count]>0){
- [self doCheckUploadResult:array];
- jsonImages = [OderJsonwriter stringWithObject:array];
- jsonFiles = jsonImages;
- }
-
- array = [dict objectForKey:@"videos"];
- NSString * jsonVideos=nil;
- if([array count]>0){
- [self doCheckUploadResult:array];
- jsonVideos = [OderJsonwriter stringWithObject:array];
- jsonFiles = jsonVideos;
- // for(int i =0;i<[array count];i++)
- // [a addObject:[[array objectAtIndex:i] objectForKey:@"oUrl"]];
- // jsonVideos = [OderJsonwriter stringWithObject:a];
- }
-
- array = [dict objectForKey:@"audios"];
- NSString * jsonAudios=nil;
- if([array count]>0){
- [self doCheckUploadResult:array];
- jsonAudios = [OderJsonwriter stringWithObject:array];
- jsonFiles = jsonAudios;
- // for(int i =0;i<[array count];i++)
- // [a addObject:[[array objectAtIndex:i] objectForKey:@"oUrl"]];
- // jsonAudios = [OderJsonwriter stringWithObject:a];
- }
-
- array = [dict objectForKey:@"files"];
- if([array count]>0){
- [self doCheckUploadResult:array];
- jsonFiles = [OderJsonwriter stringWithObject:array];
- // for(int i =0;i<[array count];i++)
- // [a addObject:[[array objectAtIndex:i] objectForKey:@"oUrl"]];
- // jsonAudios = [OderJsonwriter stringWithObject:a];
- }
-
-
- array = nil;
-
- JXNetwork* p = [self addTask:act_MsgAdd param:nil toView:toView];
- [p setPostValue:[NSNumber numberWithInt:type] forKey:@"type"];
- [p setPostValue:[NSNumber numberWithInt:flag] forKey:@"flag"];
- // [p setPostValue:[NSNumber numberWithInt:visible] forKey:@"visible"];
- [p setPostValue:[NSNumber numberWithInt:1] forKey:@"cityId"];
- [p setPostValue:self.access_token forKey:@"access_token"];
- [p setPostValue:text forKey:@"text"];
- if (type == 5) {
- [p setPostValue:jsonFiles forKey:@"files"];
- }else if (type == 6) {
- [p setPostValue:[dict objectForKey:@"sdkUrl"] forKey:@"sdkUrl"];
- [p setPostValue:[dict objectForKey:@"sdkIcon"] forKey:@"sdkIcon"];
- [p setPostValue:[dict objectForKey:@"sdkTitle"] forKey:@"sdkTitle"];
- }
- else {
- [p setPostValue:jsonImages forKey:@"images"];
- [p setPostValue:jsonAudios forKey:@"audios"];
- [p setPostValue:jsonVideos forKey:@"videos"];
- }
- // [p setPostValue:myself.model forKey:@"model"];
- // [p setPostValue:myself.osVersion forKey:@"osVersion"];
- // [p setPostValue:myself.serialNumber forKey:@"serialNumber"];
- // [p setPostValue:lable forKey:@"lable"];
- //
- // if (location.length > 0) {
- // [p setPostValue:[NSNumber numberWithDouble:coor.latitude] forKey:@"latitude"];
- // [p setPostValue:[NSNumber numberWithDouble:coor.longitude] forKey:@"longitude"];
- // [p setPostValue:location forKey:@"location"];
- // }
-
- // if (lookArray.count >0 && (visible == 3 || visible == 4)) {
- // NSString * lookStr = [lookArray componentsJoinedByString:@","];
- // NSString * arrayTitle = nil;
- // switch (visible) {
- // case 3:
- // arrayTitle = @"userLook";
- // break;
- // case 4:
- // arrayTitle = @"userNotLook";
- // break;
- // default:
- // arrayTitle = @"";
- // break;
- // }
- // [p setPostValue:lookStr forKey:arrayTitle];
- // }
-
- // if (remindArray.count > 0) {
- // [p setPostValue:[remindArray componentsJoinedByString:@","] forKey:@"userRemindLook"];
- // }
-
- [p go];
- }
- -(void)doCheckUploadResult:(NSMutableArray*)a{
- NSMutableDictionary* p;
- for(NSInteger i=[a count]-1;i>=0;i--){
- p = [a objectAtIndex:i];
- if([[p objectForKey:@"status"]intValue]!=1){
- [a removeObjectAtIndex:i];
- continue;
- }
- [p removeObjectForKey:@"status"];
- }
- }
- -(JXNetwork*)addTask:(NSString*)action param:(id)param toView:(id)delegate{
- if([action length]<=0)
- return nil;
- if(param==nil)
- param = @"";
-
- NSString* url=nil;
- NSString* s=@"";
-
- JXNetwork *task = [[JXNetwork alloc] init];
-
- if([action rangeOfString:@"http://"].location == NSNotFound){
- if([action isEqualToString:act_UploadFile]){
- s = self.uploadUrl;
- }else {
- NSRange range = [self.apiUrl rangeOfString:@"config"];
- if (range.location != NSNotFound) {
- s = [self.apiUrl substringToIndex:range.location];
- }else {
- s = self.apiUrl;
- }
- }
- }
- url = [NSString stringWithFormat:@"%@%@%@",s,action,param];
-
- task.url = url;
- task.param = param;
- task.delegate = self;
- task.action = action;
- task.toView = delegate;
- // [url1 release];
-
- if([task.toView respondsToSelector:@selector(didServerNetworkStart:)])
- [task.toView didServerNetworkStart:task];
-
- if([task isImage] || [task isAudio] || [task isVideo])
- [task go];
-
- // [_arrayConnections addObject:task];
- // [task release];
- return task;
- }
- - (void)requestSuccess:(JXNetwork *)task {
-
- @autoreleasepool {
- NSString* string = task.responseData;
- // NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- NSString* error=nil;
-
- SBJsonParser * resultParser = [[SBJsonParser alloc] init] ;
- NSDictionary *resultObject = [resultParser objectWithString:string];
- // id resultObject = [resultParser objectWithData:task.responseData];
- // [resultParser release];
-
- if( [resultObject isKindOfClass:[NSDictionary class]] ){
- int resultCode = [[resultObject objectForKey:@"resultCode"] intValue];
- if(resultCode != 1)
- {
- error = [resultObject objectForKey:@"resultMsg"];
- // if([error length]<=0)
- // error = @"出错拉";
- }
- }else{
- error = @"不能识别返回值";
- if([string length]>=6){
- if([[string substringToIndex:6] isEqualToString:@"<html>"])
- error = @"服务器好像有点问题";
- }
- }
-
- if(error){
- [self doError:task dict:resultObject resultMsg:string errorMsg:error];
- }else{
- // NSLog(@"%@成功:%@",task.action,string);
- resultObject = [resultObject objectForKey:@"data"];
- NSDictionary * dict = nil;
- NSArray* array = nil;
-
- if( [resultObject isKindOfClass:[NSDictionary class]] )
- dict = resultObject;
- if( [resultObject isKindOfClass:[NSArray class]] )
- array = resultObject;
-
- if( [task.toView respondsToSelector:@selector(didServerNetworkResultSucces:dict:array:)] )
- [task.toView didServerNetworkResultSucces:task dict:dict array:array];
-
- dict = nil;
- array = nil;
- }
- resultObject = nil;
- // [pool release];
- // [_arrayConnections removeObject:task];
- }
- }
- - (void)requestError:(JXNetwork *)task {
- if([task.toView respondsToSelector:@selector(didServerNetworkError:error:)] ){
- [task.toView didServerNetworkError:task error:task.error];
- }
- }
- -(void) doError:(JXNetwork*)task dict:(NSDictionary*)dict resultMsg:(NSString*)string errorMsg:(NSString*)errorMsg{
- if ([task.toView respondsToSelector:@selector(didServerNetworkResultFailed:dict:)])
- [task.toView didServerNetworkResultFailed:task dict:dict];
- }
- - (NSString *)getDataUrlWithImage:(UIImage *)image {
- NSData *data = UIImagePNGRepresentation(image);
-
- NSString *fileName = [self generateUUID];
- NSFileManager *manager = [NSFileManager defaultManager];
- NSURL *groupURL = [manager containerURLForSecurityApplicationGroupIdentifier:APP_GROUP_ID];
- NSString *filePath = [NSString stringWithFormat:@"%@.jpg",fileName];
- NSURL *fileURL = [groupURL URLByAppendingPathComponent:filePath];
- NSString *path = [fileURL.absoluteString substringFromIndex:7];
- [data writeToFile:path atomically:YES];
-
- return path;
- }
- - (NSString *)getDataUrlWithVideo:(NSData *)video {
-
- NSString *fileName = [self generateUUID];
- NSFileManager *manager = [NSFileManager defaultManager];
- NSURL *groupURL = [manager containerURLForSecurityApplicationGroupIdentifier:APP_GROUP_ID];
- NSString *filePath = [NSString stringWithFormat:@"%@.mp4",fileName];
- NSURL *fileURL = [groupURL URLByAppendingPathComponent:filePath];
- NSString *path = [fileURL.absoluteString substringFromIndex:7];
- [video writeToFile:path atomically:YES];
-
- return path;
- }
- - (NSString *)generateUUID
- {
- return [NSUUID UUID].UUIDString;
- }
- -(UIImage*)getFirstImageFromVideo:(NSString*)video {
- NSFileManager *manager = [NSFileManager defaultManager];
- NSURL *groupURL = [manager containerURLForSecurityApplicationGroupIdentifier:APP_GROUP_ID];
- NSString *path = [groupURL.absoluteString substringFromIndex:7];
-
- NSString *filePath = [NSString stringWithFormat:@"%@%@.jpg",path,[[video lastPathComponent] stringByDeletingPathExtension]];
- if([[NSFileManager defaultManager] fileExistsAtPath:filePath])
- return [UIImage imageWithContentsOfFile:filePath];
-
- NSURL* url;
- if( [video rangeOfString:@"http://"].location == NSNotFound && [video rangeOfString:@"https://"].location == NSNotFound)
- url = [NSURL fileURLWithPath:video];
- else
- url = [NSURL URLWithString:video];
-
-
- //获取视频的首帧作为缩略图
- AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil];
- NSParameterAssert(asset);
- AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
- generator.appliesPreferredTrackTransform = YES;
- generator.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels;
- NSError *error = nil;
- CGImageRef cgImage = [generator copyCGImageAtTime:CMTimeMakeWithSeconds(0.8, 600) actualTime:nil error:&error];
- if (!cgImage) {
- NSLog(@"获取视频第一帧图片失败:%@",error);
- return nil;
- }
- //保存图片到本地
- NSData * imageData = UIImageJPEGRepresentation([UIImage imageWithCGImage:cgImage], 1);
- NSError *imageerror =nil;
- BOOL isSuccess = [imageData writeToFile:filePath atomically:YES];
- if (!isSuccess) {
- NSLog(@"获取视频第一帧图片写入失败,%@",imageerror);
- }
-
- return [UIImage imageWithCGImage:cgImage];
- }
- // 获取视频时长
- - (CGFloat)getVideoLength:(NSURL *)url{
- AVURLAsset *avUrl = [AVURLAsset assetWithURL:url];
- CMTime time = [avUrl duration];
- int second = ceil(time.value/time.timescale);
- return second;
- }
- //压缩
- - (NSString *)compressionVideoWithUlr:(NSURL *)url{
- // NSLog(@"压缩前大小 %f MB",[self fileSize:url]);
- NSFileManager *manager = [NSFileManager defaultManager];
- NSURL *groupURL = [manager containerURLForSecurityApplicationGroupIdentifier:APP_GROUP_ID];
- NSString *fileName = [self generateUUID];
-
- NSString* path1 = [[groupURL.absoluteString substringFromIndex:7] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp4",fileName]];
-
- NSString *bakPath= path1; //新路径不能存在文件 如果存在是不能压缩成功的
- AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:url options:nil];
- AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:avAsset presetName:AVAssetExportPreset1280x720];
- exportSession.outputURL = [NSURL fileURLWithPath:bakPath];
- exportSession.outputFileType = AVFileTypeMPEG4;
- exportSession.shouldOptimizeForNetworkUse= YES;
- [exportSession exportAsynchronouslyWithCompletionHandler:^(void)
- {
- // BOOL goToUploadFile=NO;
- switch (exportSession.status) {
- case AVAssetExportSessionStatusCancelled:
- NSLog(@"AVAssetExportSessionStatusCancelled");
- break;
- case AVAssetExportSessionStatusUnknown:
- NSLog(@"AVAssetExportSessionStatusUnknown");
- break;
- case AVAssetExportSessionStatusWaiting:
- NSLog(@"AVAssetExportSessionStatusWaiting");
- break;
- case AVAssetExportSessionStatusExporting:
- NSLog(@"AVAssetExportSessionStatusExporting");
- break;
- case AVAssetExportSessionStatusCompleted:{
- //压缩成功
- self.urlPath = bakPath;
- }
- break;
- case AVAssetExportSessionStatusFailed:
- {
- NSError *error=exportSession.error;
- if (error) {
-
- }
- }
-
- break;
- default:
-
- break;
- }
-
- }];
- if (self.urlPath.length > 0) {
- return self.urlPath;
- }
- return nil;
- }
- //计算压缩大小
- - (CGFloat)fileSize:(NSURL *)path
- {
- return [[NSData dataWithContentsOfURL:path] length]/1024.00 /1024.00;
- }
- @end
|