使用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);
   }];
}




相关文章
|
7月前
|
小程序
微信小程序实现上传视频 / 上传图片功能以及整合上传视频 / 上传图片功能(超详细)
微信小程序实现上传视频 / 上传图片功能以及整合上传视频 / 上传图片功能(超详细)
|
8月前
|
数据采集 Python
视频下载
利用python爬虫爬取视频
212 0
uiapp 上传图片
uiapp 上传图片
131 0
|
Web App开发
【视频点播】阿里云视频点播如何获取视频播放的URL
展示如何使用阿里云视频点播服务获取播放地址.
35026 0
【视频点播】阿里云视频点播如何获取视频播放的URL
|
JavaScript 前端开发 对象存储
javascript 手机移动端 微信 拍照 录音 录视频并阿里oss上传
调用照相机,拍照  1 调用摄像机,视频  1 调用录音机,录音  1 第一种方法: var showimg = document.
2365 0
|
开发工具 开发者 微服务
技术点-阿里云视频点播(上传视频) | 学习笔记
快速学习技术点-阿里云视频点播(上传视频)
|
存储 编解码 前端开发
【微信开发】上传用户语音 并转码 分享
【微信开发】上传用户语音 并转码 分享
【微信开发】上传用户语音 并转码 分享
|
存储 Web App开发 编解码
关于点播视频文件生成封面的实现方案设计思考
对于多媒体存储服务,点播视频文件生成封面应该是非常基础的功能之一,目前自己正在开发的多媒体存储服务就面临这样的需求。因为这个多媒体存储服务是从零开始的,缺少部分基础功能的情况,各位大佬别见笑。 但是,正是因为从零开始开发,因此很多之前被忽略的问题也渐渐浮出水面,映入了我们的眼帘。这个经历过程是非常可贵的,自己从中也学到了很多东西。
193 0
|
存储 人工智能 API
产品百科 |如何在视频点播服务中设置视频封面
为了让视频可以更加美观地展示,每一个在点播上传的视频都设置了封面图片,点播提供了多种设置和修改视频封面的方法。视频上传完成后,点播会默认进行视频截图,如果上传时指定了封面则会使用指定的图片作为封面,如果不指定封面,则会将一张视频的截图作为封面,视频上传完成之后也可以对封面进行更新。
产品百科 |如何在视频点播服务中设置视频封面