使用AFN上传视频

简介: 使用AFN上传视频

3年前有写过上传图片的文章,今天在这记录下上传视频的方法!上传图片和视频都属于文件上传(upload file),其实是类似的,只需要在FormData时放入不同文件的二进制,再填写上传文件的mimeType(视频(video/mp4),图片(image/jpeg))即可。我在这里使用AFHTTPSessionManager 写下上传方法:

.h
  /***
  * brief 上传视频
  * params view : 显示进度的视图
  * finish 返回上传后的视频地址信息
  ***/
 + (void)uploadVideoWithFilePath:(NSString *)filePath view:(UIView *)view progress:(UploadProgress)progress andFinish:(void (^)(NSDictionary *result, NSError *error))finish;
.m
//上传视频 实现
+ (void)uploadVideoWithFilePath:(NSString *)filePath view:(UIView *)view progress:(UploadProgress)progress andFinish:(void (^)(NSDictionary *, NSError *))finish {
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer.timeoutInterval = 15;
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    NSString *x_auth_token = @"校验权限的x-auth-token";
    [manager.requestSerializer setValue:x_auth_token forHTTPHeaderField:@"x-auth-token"];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/plain",@"text/json", @"text/javascript", @"text/html",nil];
   NSString *url = @"上传服务器的地址";
    [manager POST:url parameters:params   constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        //上传视频的参数
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        formatter.dateFormat = @"yyyyMMddHHmmss";
        NSString *str = [formatter stringFromDate:[NSDate date]];
        NSString *fileName = [NSString stringWithFormat:@"%@.mp4", str];
        NSData *fileData = [NSData dataWithContentsOfFile:filePath];
        [formData appendPartWithFileData:fileData name:@"file" fileName:fileName mimeType:@"video/mp4"];
  } progress:^(NSProgress * _Nonnull uploadProgress) {
        dispatch_async(dispatch_get_main_queue(), ^{
            //进度在主线程中刷新UI界面
            NSLog(@"uploadProgress.completedUnitCount-->%lld", uploadProgress.completedUnitCount);
            NSLog(@"uploadProgress.totalUnitCount-->%lld", uploadProgress.totalUnitCount);
            NSNumber *progressValue = @(1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
            NSNumber *progressPercent = @(100.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
            NSString *progressToast = [NSString stringWithFormat:@"%zd%%", [progressPercent integerValue]];
            progress(progressValue, progressToast);
        });
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"responseObject-->%@",responseObject);
        if (responseObject[@"code"].intValue == 200) { //成功
              finish(responseObject, nil);
        } else { //失败
              NSError *error = [[NSError alloc] init];
              finish(nil,error);
        }
   } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //网络问题
          //网络异常
          finish(nil, error);
   }];
}




相关文章
|
Swift iOS开发 Perl
如何解决Swift混编的module编译错误
前言很多iOS工程都是基于Object-C开发,再逐步向Swift演进,演进过程中不可避免要进行Swift混编。Swift模块需要支持LLVM Module规范,混编工程会遇到各种Module编译错误。这对于不熟悉的同学来说简直是灾难,严重影响开发效率。本文会介绍常见的Module编译错误,希望对大家有所帮助。常见错误1:Could not build module xxx当一个OC模块引用了Sw
7727 1
如何解决Swift混编的module编译错误
|
图形学
unity3d UI特效处理,image置灰shader
新建材质,材质指定该shader,然后将材质球拖拽到image上面,效果就显示出来了 图片.png Shader "UI/ImageGreyShader" { Properties { [PerRendere...
3524 0
|
前端开发
翻转视角:CSS让卡片设计在网页上活起来!
翻转视角:CSS让卡片设计在网页上活起来!
|
存储 测试技术 iOS开发
CocoaLumberjack的ios应用开发使用指南
CocoaLumberjack的ios应用开发使用指南
426 2
|
移动开发 Android开发 iOS开发
ios标准页面调用HTML5页面和HTML5调用ios的函数
ios标准页面调用HTML5页面和HTML5调用ios的函数
226 0
|
安全 Ubuntu Linux
在Linux中,如何进行系统升级?
在Linux中,如何进行系统升级?
|
前端开发 JavaScript
Three.js实现汽车3D展示/开关门/变色/运动/视角切换/波动热点/汽车模型
Three.js实现汽车3D展示/开关门/变色/运动/视角切换/波动热点/汽车模型
1768 0
Three.js实现汽车3D展示/开关门/变色/运动/视角切换/波动热点/汽车模型
|
jenkins API 持续交付
iOS 底层原理38:自动化打包(三)Fastlane
iOS 底层原理38:自动化打包(三)Fastlane
2311 0
iOS 底层原理38:自动化打包(三)Fastlane
|
XML 存储 安全
微信支付宝支付真的安全吗?为什么没人攻击
微信支付宝支付真的安全吗?为什么没人攻击