美文网首页程序员
上传图片到七牛云

上传图片到七牛云

作者: 是夏目啊 | 来源:发表于2017-05-17 16:43 被阅读0次

    由于公司后台还没有提供上传图片功能,但app前期试点运营需要app上传图片功能,所以就想到了把图片上传到七牛云。
    首先是注册账号,实名认证,这个就不说了,去官网注册就行了。官网地址:
    然后就是下载文档和sdk。objc

    其实,我们需要的主要有2个功能:图片上传和下载。

    1.图片上传:
    我们需要3个参数:token,AK, SK(后2个参数在你新建空间的时候会有,具体查看:个人面板->密钥管理 )

    按照官方的demo,我们需要一个token作为上传凭证,官方建议后天服务器返回token,不建议在客户端生成。
    然后,查看了一个token的获取方式,有一个在线生成token,主要分成6步,具体可以参照文档:上传凭证
    我们可以按照这6步模拟在线生成token,代码如下:

    需要自己设置token有效时间,具体参照官方文档
    + (NSString *)createTokenWithScope:(NSString *)scope accessKey:(NSString *)accessKey secretKey:(NSString *)secretKey liveTime:(NSInteger)deadline {
    // 1.确定上传策略
    NSMutableDictionary *jsonDict = [[NSMutableDictionary alloc] init];
    jsonDict[@"scope"] = scope;
    jsonDict[@"deadline"] = @(deadline);

    // 2.将上传策略序列化成为json格式:
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict
                                                       options:0
                                                         error:nil];
     // 3.对json序列化后的上传策略进行URL安全的Base64编码,得到如下encoded:
    NSString* encoded = [self URLSafeBase64Encode:jsonData];
    
     // 4.用SecretKey对编码后的上传策略进行HMAC-SHA1加密,并且做URL安全的Base64编码,得到如下的encoded_signed:
    NSString *encoded_signed = [self HMACSHA1:secretKey text:encoded];
    
    // 5.将 AccessKey、encode_signed 和 encoded 用 “:” 连接起来,得到如下的UploadToken:
    NSString *uploadToken=[NSString stringWithFormat:@"%@:%@:%@",accessKey,encoded_signed,encoded];
    
    return uploadToken;
    }
    

    Base64编码,具体参照官方sdk
    + (NSString *)URLSafeBase64Encode:(NSData *)text {

    NSString *base64 = [[NSString alloc] initWithData:[QN_GTM_Base64 encodeData:text] encoding:NSUTF8StringEncoding];
    base64 = [base64 stringByReplacingOccurrencesOfString:@"+" withString:@"-"];
    base64 = [base64 stringByReplacingOccurrencesOfString:@"/" withString:@"_"];
    return base64;
    }
    

    SHA1加密,具体参照官方sdk

    +  (NSString *)HMACSHA1:(NSString *)key text:(NSString *)text {
    const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];
    const char *cData = [text cStringUsingEncoding:NSUTF8StringEncoding];
    char cHMAC[CC_SHA1_DIGEST_LENGTH];
    CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
    NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:CC_SHA1_DIGEST_LENGTH];
    NSString *hash = [self URLSafeBase64Encode:HMAC];
    return hash;
    }
    

    上传的代码,具体参照官方的demo

    - (void)uploadImageToQNFilePath:(NSString *)filePath {
    
    //self.token = @"你的token";
    QNUploadManager *upManager = [[QNUploadManager alloc] init];
    QNUploadOption *uploadOption = [[QNUploadOption alloc] initWithMime:nil progressHandler:^(NSString *key, float percent) {
        //NSLog(@"七牛______percent == %.2f", percent);
        
    } params:nil checkCrc:NO cancellationSignal:nil];
    
    [upManager putFile:filePath key:nil token:qnToken complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
        //
        NSLog(@"七牛______info ===== %@", info);
        NSLog(@"七牛______resp ===== %@", resp);
        
    } option:uploadOption];
    

    2.图片下载:

    这个就比较简单了,主要是拼接URL,注意,我们要看空间是公开的还是私有的,然后再处理,具体怎么做,可以参考 https://segmentfault.com/q/1010000005941430

    相关文章

      网友评论

        本文标题:上传图片到七牛云

        本文链接:https://www.haomeiwen.com/subject/gridxxtx.html