iOS整合七牛雲(上傳圖片,視訊,音訊等檔案)
阿新 • • 發佈:2018-12-14
用的CocoaPods匯入SDK
platform :ios,'9.0'
target '專案名' do
pod 'AFNetworking'
pod 'Qiniu'
end
匯入標頭檔案
#import<QiniuSDK.h> #import<AFNetworking.h> #include<ComminCrypto/CommonCrypto.h> #import<QN_GTM_Base64.h> #import<QBEtag.h> #import<QNConfiguration.h>
#define kQNinterface @"官網獲取外鏈域名"
官網獲取兩個關鍵
static NSString *accessKey = @"官網獲取";
static NSString *secretKey = @"官網獲取";
獲取令牌專案中一般是由伺服器來生成,這裡用於測試
+ (NSString *)makeToken:(NSString *)accessKey secretKey:(NSString *)secretKey{ const char *secretKeyStr = [secretKey UTF8String]; NSString *policy = [QiniuLoad marshal]; NSData *policyData = [policy dataUsingEncoding:NSUTF8StringEncoding]; NSString *encodedPolicy = [QN_GTM_Base64 stringByWebSafeEncodingData:policyData padded:TRUE]; const char *encodedPolicyStr = [encodedPolicy cStringUsingEncoding:NSUTF8StringEncoding]; char digestStr[CC_SHA1_DIGEST_LENGTH]; bzero(digestStr, 0); CCHmac(kCCHmacAlgSHA1, secretKeyStr, strlen(secretKeyStr), encodedPolicyStr, strlen(encodedPolicyStr), digestStr); NSString *encodedDigest = [QN_GTM_Base64 stringByWebSafeEncodingBytes:digestStr length:CC_SHA1_DIGEST_LENGTH padded:TRUE]; NSString *token = [NSString stringWithFormat:@"%@:%@:%@", accessKey, encodedDigest, encodedPolicy]; return token;//得到了token }
+ (NSString *)marshal{ NSInteger _expire = 0; time_t deadline; time(&deadline);//返回當前系統時間 //@property (nonatomic , assign) int expires; 怎麼定義隨你... deadline += (_expire > 0) ? _expire : 3600; // +3600秒,即預設token儲存1小時. NSNumber *deadlineNumber = [NSNumber numberWithLongLong:deadline]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setObject:@"修改成七牛儲存空間的名字" forKey:@"scope"];//根據 [dic setObject:deadlineNumber forKey:@"deadline"]; NSString *json = [QiniuLoad convertToJsonData:dic ]; return json; }
+(NSString *)convertToJsonData:(NSDictionary *)dict{
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString;
if (!jsonData) {
NSLog(@"%@",error);
}else{
jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
}
NSMutableString *mutStr = [NSMutableString stringWithString:jsonString];
NSRange range = {0,jsonString.length};
[mutStr replaceOccurrencesOfString:@" " withString:@"" options:NSLiteralSearch range:range];
NSRange range2 = {0,mutStr.length};
[mutStr replaceOccurrencesOfString:@"\n" withString:@"" options:NSLiteralSearch range:range2];
return mutStr;
}
上傳圖片
+(void)uploadImageToQNFilePath:(NSArray *)photos success:(QNSuccessBlock)success failure:(QNFailureBlock)failure{
NSMutableArray *imageAry =[NSMutableArray new];
NSMutableArray *imageAdd = [NSMutableArray new];
for (ZLPhotoAssets *status in photos) {
[imageAry addObject:[status aspectRatioImage]];
}
//主要是把圖片或者檔案轉成nsdata型別就可以了
QNConfiguration *config = [QNConfiguration build:^(QNConfigurationBuilder *builder) {
builder.zone = [QNZone zone0];}];
QNUploadManager *upManager = [[QNUploadManager alloc] initWithConfiguration:config];
QNUploadOption *uploadOption = [[QNUploadOption alloc] initWithMime:nil
progressHandler:^(NSString *key, float percent) {
NSLog(@"上傳進度 %.2f", percent);
}
params:nil
checkCrc:NO
cancellationSignal:nil];
[imageAry enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%ld",idx);
NSData *data;
if (UIImagePNGRepresentation(obj) == nil){
data = UIImageJPEGRepresentation(obj, 1);
} else {
data = UIImagePNGRepresentation(obj);}
[upManager putData:data key:[QiniuLoad qnImageFilePatName] token:[QiniuLoad makeToken:accessKey secretKey:secretKey] complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
NSLog(@"%@",resp[@"key"]);
if (info.isOK) {
[imageAdd addObject:[NSString stringWithFormat:@"%@%@",kQNinterface,resp[@"key"]]];}else{
[imageAdd addObject:[NSString stringWithFormat:@"%ld",idx]];}
if (imageAdd.count == imageAry.count) {
if (success) {
success([imageAdd componentsJoinedByString:@";"]);}}}
option:uploadOption];}];}
上傳視訊(格式:MP4)
+(void)uploadVideoToQNFilePath:(NSURL *)url success:(QNSuccessBlock)success failure:(QNFailureBlock)failure{
NSMutableArray *imageAdd = [NSMutableArray new];
NSMutableArray *errors = [NSMutableArray new];
QNConfiguration *config = [QNConfiguration build:^(QNConfigurationBuilder *builder) {
builder.zone = [QNZone zone0];}];
QNUploadManager *upManager = [[QNUploadManager alloc] initWithConfiguration:config];
QNUploadOption *uploadOption = [[QNUploadOption alloc] initWithMime:nil
progressHandler:^(NSString *key, float percent) {
NSLog(@"上傳進度 %.2f", percent);}
params:nil
checkCrc:NO
cancellationSignal:nil];
NSData *myVideoData = [NSData dataWithContentsOfURL:url];
[upManager putData:myVideoData key:[QiniuLoad qnVideoFilePatName] token:[QiniuLoad makeToken:accessKey secretKey:secretKey] complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
if (info.isOK) {
[imageAdd addObject:[NSString stringWithFormat:@"%@%@",kQNinterface,resp[@"key"]]];
// NSLog(@"%@",imageAdd);}else{
[errors addObject:[NSString stringWithFormat:@"%@", @1]];}
if (imageAdd.count == 1) {
if (success) {
success([imageAdd componentsJoinedByString:@";"]);}}else{
if (failure) {
failure([errors componentsJoinedByString:@","]);}}}
option:uploadOption];}
上傳音訊(格式:AMR)
+(void)uploadAmrToQNFilePath:(NSString *)url success:(QNSuccessBlock)success failure:(QNFailureBlock)failure{
NSMutableArray *imageAdd = [NSMutableArray new];
NSMutableArray *errors = [NSMutableArray new];
QNConfiguration *config = [QNConfiguration build:^(QNConfigurationBuilder *builder) {
builder.zone = [QNZone zone0];}];
QNUploadManager *upManager = [[QNUploadManager alloc] initWithConfiguration:config];
QNUploadOption *uploadOption = [[QNUploadOption alloc] initWithMime:nil
progressHandler:^(NSString *key, float percent) {
NSLog(@"上傳進度 %.2f", percent);}
params:nil
checkCrc:NO
cancellationSignal:nil];
NSData *data = [NSData dataWithContentsOfFile:url];
[upManager putData:data key:[QiniuLoad qnAmrFilePatName] token:reslut[@"data"] complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
if (info.isOK) {
[imageAdd addObject:[NSString stringWithFormat:@"%@%@",kQNinterface,resp[@"key"]]];
// NSLog(@"%@",imageAdd);}else{
[errors addObject:[NSString stringWithFormat:@"%@", @1]];}
if (imageAdd.count == 1) {
if (success) {
success([imageAdd componentsJoinedByString:@";"]);}}else{
if (failure) {
failure([errors componentsJoinedByString:@","]);}}
} option:uploadOption];}
檔案命名
+ (NSString *)qnImageFilePatName{
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyyMMdd"];
NSString *nowe = [formatter stringFromDate:[NSDate date]];
char datax[12];//十六位防重字元
for (int x=0;x<12;datax[x++] = (char)('A' + (arc4random_uniform(26))));
NSString *number = [[NSString alloc] initWithBytes:datax length:12 encoding:NSUTF8StringEncoding];
//當前時間
NSInteger interval = (NSInteger)[[NSDate date]timeIntervalSince1970];
NSString *name = [NSString stringWithFormat:@"Picture/%@/%ld%@.jpg",now,interval,number];
NSLog(@"name__%@",name);
return name;}
簡單封裝了下直接拖到demo裡就能用
百度雲連結:https://pan.baidu.com/s/1mi80azI密碼:rbcm
作者:搬運工一隻自我修養的
連結:HTTPS://www.jianshu.com/p/3b4b3dee26b5
來源:書繁簡
繁簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。
