最近公司可爱可敬的产品大大友好的对我们提出个小需求用户展示 拍摄视频经过多方考证最后我的大大们决定用阿里云这个大哥的第三方 废话不到说下面是阿里云踩坑之后吐血集成
我用的是文件上传的方式 别问我我也不知道怎么就用这个了
首先我们围观大哥些的操作步骤
https://help.aliyun.com/document_detail/32059.html?spm=a2c4g.11186623.2.18.58f986a0rb8WDN
像我这种菜鸡一定不要用自签名模式啊 根本没弄明白是个什么鬼!!!
用STS鉴权模式
通过后台返回数据中获得
BucketName,FilePath,BucketName
这三个参数
然后就按照文档照着抄了
首先是要初始化
OSSClient
前两个参数是需要后台配置的 后一个是阿里云定死的
#define ACCKEY @""
#define ACCSECRET @""
#define ENDPOINT @"oss-cn-hangzhou.aliyuncs.com"
credential= [[OSSPlainTextAKSKPairCredentialProvideralloc]initWithPlainTextAccessKey:ACCKEY secretKey:ACCSECRET];
client = [[OSSClient alloc] initWithEndpoint:ENDPOINT credentialProvider:credential];
//网络配置
OSSClientConfiguration * conf = [OSSClientConfiguration new];
conf.maxRetryCount = 3;// 网络请求遇到异常失败后的重试次数
conf.timeoutIntervalForResource = 120 ;// 允许资源传输的最长时间
client = [[OSSClient alloc] initWithEndpoint:ENDPOINT credentialProvider: credential clientConfiguration:conf];
上传文件
objectKey 拼接的时候一定是 文件路径和文件名 这都是后台返回的 要不你就会想我一样 视频上产成功了 哎呀 后台怎么没有 怎么都找不到原因
NSString * objectKey = [NSString stringWithFormat:@"%@/%@", _filePath, _fileName];
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
put.bucketName = _bucketName;
put.objectKey= objectKey;
put.uploadingFileURL= fileUrl;// 直接上传NSData
put.uploadProgress= ^(int64_tbytesSent,int64_ttotalByteSent,int64_ttotalBytesExpectedToSend) {
NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
OSSTask* putTask = [clientputObject:put];
[putTaskcontinueWithBlock:^id(OSSTask*task) {
if(!task.error) {
//成功后通知后台
[selfaddVideoInfo];
}else{
NSLog(@"upload object failed, error: %@" , task.error);
}
returnnil;
}];
不过一般都是要获取时长和大小的
获取时长的方法
-(CGFloat)getVideoLength:(NSURL*)URL{
AVURLAsset *avUrl = [AVURLAsset assetWithURL:URL];
CMTimetime = [avUrlduration];
intsecond =ceil(time.value/time.timescale);
returnsecond;
}
获取大小的方法
- (NSInteger)getFileSize:(NSString*)path{
NSFileManager * filemanager = [[NSFileManager alloc]init];
if([filemanagerfileExistsAtPath:path]){
NSDictionary* attributes = [filemanagerattributesOfItemAtPath:patherror:nil];
NSNumber*theFileSize;
if( (theFileSize = [attributesobjectForKey:NSFileSize]) )
fileSize= [theFileSizeintValue]/1024;
return [theFileSizeintValue]/1024;
} else {
return1;
}
}
还有点准备经过下篇再写了
以上是我一个菜鸡的一点小小经验 大神请绕道