iOS 七牛云存储上传实践

MFQiNiuUtil.m 方法:

+ (NSString *)makeToken:(NSString *)accessKey secretKey:(NSString *)secretKey{
    const char *secretKeyStr = [secretKey UTF8String];
    NSString *policy = [MFQiNiuUtil 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:kQiNiuBucketName forKey:@"scope"];//根据
    [dic setObject:deadlineNumber forKey:@"deadline"];
    NSString *json = [MFQiNiuUtil convertToJsonData:dic];
    return json;
}

+(NSString *)convertToJsonData:(NSMutableDictionary *)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;
}

上传示例:

NSString *token = [MFQiNiuUtil makeToken:kQiNiuAccessKey secretKey:kQiNiuSecretKey];
    QNUploadManager *upManager = [[QNUploadManager alloc] init];
    NSData *data = [feedbackInfo dataUsingEncoding : NSUTF8StringEncoding];
    
    [upManager putData:data key:[NSString stringWithFormat:@"%@.txt",feedbackStr] token:token
              complete: ^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
                  NSLog(@"%@", info);
                  NSLog(@"%@", resp);
                  
              } option:nil];
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 项目最近又来了添加视频的需求,暂定存储到七牛。具体步骤大致分为三步:1:获取本地视频缩略图展示,当用户选择某一段视...
    夏广成阅读 15,449评论 3 14
  • iOS开发-七牛SDK断点上传功能的封装 公司的某些业务使用的是七牛云储存,要把一些文件(视频)直传到七牛服务器 ...
    看我的大白眼阅读 5,694评论 0 2
  • 翻了翻之前的日记,有些看了很有感觉,勾起了我对往日青春年少美好岁月的回忆。 然后总结自己写的字儿,发现自己想要表达...
    守夜呓语阅读 1,176评论 0 0
  • 如果你是从事文秘工作或者政府办公室工作人员,是不是头疼如何写好文章? 自从事文秘工作后,工作性质要求,杜绝抒情、...
    康巴报姐阅读 2,299评论 0 1