首页 > 系统 > iOS > 正文

iOS上传视频到服务器

2019-11-09 18:08:43
字体:
来源:转载
供稿:网友

这里介绍用AFN上传本地拍摄的视频到服务端 

    //视频转换为MP4     //转码操作...     _hud.mode = MBPRogressHUDModeIndeterminate;     _hud.labelText = @"转码中...";    AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:_filePathURL  options:nil];     NSDateFormatter* formater = [[NSDateFormatter alloc] init];     [formater setDateFormat:@"yyyyMMddHHmmss"];    _fileName = [NSString stringWithFormat:@"output-%@.mp4",[formater stringFromDate:[NSDate date]]];    _outfilePath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/%@", _fileName];    NSArray *compatiblePresets = [AVAssetExportsession exportPresetsCompatibleWithAsset:avAsset];    if ([compatiblePresets containsObject:AVAssetExportPresetMediumQuality])    {        MyLog(@"outPath = %@",_outfilePath);        AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]initWithAsset:avAsset presetName:AVAssetExportPresetMediumQuality];        exportSession.outputURL = [NSURL fileURLWithPath:_outfilePath];        exportSession.outputFileType = AVFileTypeMPEG4;        [exportSession exportAsynchronouslyWithCompletionHandler:^{            if ([exportSession status] == AVAssetExportSessionStatusCompleted) {                MyLog(@"AVAssetExportSessionStatusCompleted---转换成功");                _filePath = _outfilePath;                _filePathURL = [NSURL URLWithString:[NSString stringWithFormat:@"file://%@",_outfilePath]];                 MyLog(@"转换完成_filePath = %@/n_filePathURL = %@",_filePath,_filePathURL);                //获取大小和长度                [self SetViewText];                [self uploadNetWorkWithParam:@{@"contenttype":@"application/octet-stream",@"discription":description}];            }else{                MyLog(@"转换失败,值为:%li,可能的原因:%@",(long)[exportSession status],[[exportSession error] localizedDescription]);                [_hud hide:YES];                [MyHelper showAlertWith:nil txt:@"转换失败,请重试"];            }        }];    }#pragma mark - 开始上传-(void)uploadNetWorkWithParam:(NSDictionary*)dict{     MyLog(@"开始上传_filePath = %@/n_filePathURL = %@",_filePath,_filePathURL);AFHTTPRequestSerializer *ser=[[AFHTTPRequestSerializer alloc]init];NSMutableURLRequest *request =[ser multipartFormRequestWithMethod:@"POST"                          URLString:[NSString stringWithFormat:@"%@%@",kBaseUrl,kVideoUploadUrl]                         parameters:@{@"path":@"show",@"key":_key,@"discription":dict[@"discription"],@"isimage":@(_isImage)}          constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {                  [formData appendPartWithFileURL:_filePathURL name:@"file" fileName:_fileName mimeType:dict[@"contenttype"] error:nil];              if (!_isImage) {   [formData appendPartWithFileURL:_path2Url name:@"tmp" fileName:@"tmp.PNG" mimeType:@"image/png" error:nil];              }          } error:nil];//@"image/png"   @"application/octet-stream"  mimeTypeAFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];NSProgress *progress = nil;NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responSEObject, NSError *error) {    if (error) {         MyLog(@"request = %@", request );         MyLog(@"response = %@", response );        MyLog(@"Error: %@", error );        [_hud hide:YES];        CXAlertView *alert=[[CXAlertView alloc]initWithTitle:NSLocalizedString(@"Warning", nil)                                                     message:NSLocalizedString(@"Upload Failed",nil)                                           cancelButtonTitle:NSLocalizedString(@"Iknow", nil)];        alert.showBlurBackground = NO;        [alert show];    } else {        MyLog(@"%@ %@", response, responseObject);        NSDictionary *backDict=(NSDictionary *)responseObject;        if ([backDict[@"success"] boolValue] != NO) {            _hud.labelText = NSLocalizedString(@"Updating", nil);            [self UpdateResxDateWithDict:backDict discription:dict[@"discription"]];            [_hud hide:YES];        }else{            [_hud hide:YES];            [MyHelper showAlertWith:nil txt:backDict[@"msg"]];        }    }    [progress removeObserver:self                  forKeyPath:@"fractionCompleted"                     context:NULL];}];[progress addObserver:self           forKeyPath:@"fractionCompleted"              options:NSKeyValueObservingOptionNew              context:NULL];[progress setUserInfoObject:@"someThing" forKey:@"Y.X."];[uploadTask resume];}

记得上传成功之后要删除沙盒中的视频文件哦!代码奉上

#pragma mark - 清除documents中的视频文件-(void)ClearMovieFromDoucments{NSFileManager *fileManager = [NSFileManager defaultManager];NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsDirectory = [paths objectAtIndex:0];NSArray *contents = [fileManager contentsOfDirectoryAtPath:documentsDirectory error:NULL];NSEnumerator *e = [contents objectEnumerator];NSString *filename;while ((filename = [e nextObject])) {    MyLog(@"%@",filename);    if ([filename isEqualToString:@"tmp.PNG"]) {        MyLog(@"删除%@",filename);        [fileManager removeItemAtPath:[documentsDirectory stringByAppendingPathComponent:filename] error:NULL];        continue;    }    if ([[[filename pathExtension] lowercaseString] isEqualToString:@"mp4"]||        [[[filename pathExtension] lowercaseString] isEqualToString:@"mov"]||        [[[filename pathExtension] lowercaseString] isEqualToString:@"png"]) {        MyLog(@"删除%@",filename);        [fileManager removeItemAtPath:[documentsDirectory stringByAppendingPathComponent:filename] error:NULL];    }}}

好,整体思路已经清楚,拿到视频资源,先转为mp4,写进沙盒,然后上传,上传成功后要记得删除沙盒中的文件。

要源文件的同学可以加群联系我:487599875,可以提供.h和.m文件。 另外博主维护一个iOS开发技术支持群:487599875,进群必须改名,群名片格式:城市-iOS-名字,例如广州-iOS-文明。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表