由于公司后臺還沒有提供上傳圖片功能,但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