由于公司后台还没有提供上传图片功能,但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