您的位置:首页 > 移动开发 > IOS开发

ios 七牛云上传流程

2015-09-17 10:16 573 查看
公司开始采用七牛的云存储,看了ios的官方文档,有点不明所以,在网上搜集整理了一下从生成token到上传的整个流程1.生成uploadToken  生成时头文件需引入
#import"QiniuSDK.h"
#import"GTM_Base64.h"
#import<CommonCrypto/CommonDigest.h>
#include<CommonCrypto/CommonHMAC.h>
#pragma mark - 生成token
- (NSString *)token{//七牛的Access/Secret Key 查看地址:https://portal.qiniu.com/setting/keyreturn [selfmakeToken:QNAccessKeysecretKey:QNSecrectKey];}
// 生成一个token
- (NSString *)makeToken:(NSString *)accessKey secretKey:(NSString *)secretKey{constchar *secretKeyStr = [secretKeyUTF8String];NSString *policy = [selfmarshal];NSData *policyData = [policydataUsingEncoding:NSUTF8StringEncoding];NSString *encodedPolicy = [GTM_Base64stringByWebSafeEncodingData:policyDatapadded:TRUE];constchar *encodedPolicyStr = [encodedPolicycStringUsingEncoding:NSUTF8StringEncoding];char digestStr[CC_SHA1_DIGEST_LENGTH];bzero(digestStr,0);CCHmac(kCCHmacAlgSHA1, secretKeyStr,strlen(secretKeyStr), encodedPolicyStr,strlen(encodedPolicyStr), digestStr);NSString *encodedDigest = [GTM_Base64stringByWebSafeEncodingBytes:digestStrlength:CC_SHA1_DIGEST_LENGTHpadded:TRUE];NSString *token = [NSStringstringWithFormat:@"%@:%@:%@",  accessKey, encodedDigest, encodedPolicy];return token;}
// Marshal as JSON format string.- (NSString *)marshal
{time_t deadline;time(&deadline);deadline +=  3600;// 1 hour by default.NSNumber *deadlineNumber = [NSNumbernumberWithLongLong:deadline];NSMutableDictionary *dic = [NSMutableDictionarydictionary];[dic setObject:QNPathforKey:@"scope"];[dic setObject:deadlineNumberforKey:@"deadline"];NSString *json = [selfdictionaryToJson:dic];return json;}
// 字典转json字符
- (NSString*)dictionaryToJson:(NSDictionary *)dic{if (!dic) {return@"";}NSError *parseError =nil;NSData *jsonData = [NSJSONSerializationdataWithJSONObject:dicoptions:NSJSONWritingPrettyPrintederror:&parseError];return [[NSStringalloc]initWithData:jsonDataencoding:NSUTF8StringEncoding];}
2.一张图片上传图片示例
- (NSString *)uploadImageWithFullPath:(NSString *)imagePath{__blockQNResponseInfo *testInfo =nil;__blockNSDictionary *testResp =nil;QNUploadManager *manager = [QNUploadManagersharedInstanceWithConfiguration:nil];[manager putFile:imagePathkey:[selfqnFilePathConnectName]token:[selftoken]complete: ^(QNResponseInfo *info,NSString *key,NSDictionary *resp) {testInfo = info;testResp = resp;} option:nil];//获取返回的Key作为文件在云中的名字返回}
//生成图片在七牛云的存储路径
- (NSString *)qnFilePathConnectName{//格式 @"Uploads/Picture/2015-09-16/55f959e1ee25a.jpg";NSDateFormatter *formatter = [[NSDateFormatteralloc]init];[formatter setDateFormat:@"yyyy-MM-dd"];NSString *now = [formatterstringFromDate:[NSDatedate]];char data[16];//十六位防重字符for (int x=0;x<16;data[x++] = (char)('A' + (arc4random_uniform(26))));NSString *number = [[NSStringalloc]initWithBytes:datalength:16encoding:NSUTF8StringEncoding];//当前时间NSInteger interval = (NSInteger)[[NSDatedate]timeIntervalSince1970];NSString *name = [NSStringstringWithFormat:@"Uploads/Picture/%@/%@%ld.jpg",now,number,interval];return name;}
[b]3.注意事项[/b]最新七牛的sdk依赖HappyDNS 下载地址:https://github.com/qiniu/happy-dns-objc配置中的一些问题解决方法:http://kb.qiniu.com/5t06228o官方生成token教程地址:http://developer.qiniu.com/docs/v6/api/reference/security/upload-token.html  经过测试这个教程有些地方是错误的,scope传my-bucket等在七牛中的文件夹就可以了,不要加后面文件的名字。也不要传returnBody参数,传了可能生成token错误
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 七牛 云存储