相信有很多公司都用過(guò)七牛簿煌,國(guó)產(chǎn)云存儲(chǔ),下面是我封裝的圖片上傳API
整體過(guò)程:客戶端向自家服務(wù)器請(qǐng)求token值,然后客戶端再根據(jù)token值向七牛云存儲(chǔ)上傳資源,成功后會(huì)有一個(gè)回調(diào)令蛉,可以在block中獲取URL,然后客戶端再將URL上傳到自家服務(wù)器上
//先向七牛上傳圖片狡恬,成功后將URL和文字內(nèi)容發(fā)送到后臺(tái)
- (void)getQiniuTokenWithImgArray:(NSArray*)ImgArray successArrBlock:(void (^)(NSArray *arr))successArr{
//作為上傳成功后的圖片的URL容器
NSMutableArray *dataArray = [NSMutableArray array];
int i = 0;
for (NSData *ImgData in ImgArray) {
//生成圖片的名字key
NSString *key = [NSString stringWithFormat:@"%@-%d",[self uuid],i]; //加個(gè)個(gè)數(shù)珠叔,防止一秒內(nèi)上傳多張圖片,這樣上傳到key就都一樣了
NSString *strUrl = [NSString stringWithFormat:@"%@?uid=%@&device=%@",@"http://你自己服務(wù)器獲取token的URL弟劲,找后臺(tái)要",[Tools userInfoWithKey:@"id"],[Tools getDeviceID]];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
//xmanager.responseSerializer = [AFHTTPResponseSerializer serializer];
//先從服務(wù)器獲取token值
[manager GET:strUrl parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSString *token = responseObject[@"uptoken"];
//NSLog(@"token---%@",token);
//調(diào)用七牛的上傳接口
QNUploadManager *upManager = [[QNUploadManager alloc] init];
[upManager putData:ImgData key:key token:token
complete: ^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
NSString *imgUrlStr = [NSString stringWithFormat:@"%@%@",@"http://七牛的域名/",key];
[dataArray addObject:imgUrlStr];
//上傳圖片的個(gè)數(shù)和返回的URL個(gè)數(shù)得一樣
if (dataArray.count == ImgArray.count) {
//得到的URL數(shù)組祷安,這些URL要上傳的自己的服務(wù)器
successArr(dataArray);
}
} option:nil];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"獲取token失敗:%@",error.description);
}];
i++;
}
}
//通用唯一識(shí)別碼
- (NSString*) uuid {
// CFUUIDRef puuid = CFUUIDCreate( nil );
// CFStringRef uuidString = CFUUIDCreateString( nil, puuid );
// NSString * result = (NSString *)CFBridgingRelease(CFStringCreateCopy( NULL, uuidString));
// CFRelease(puuid);
// CFRelease(uuidString);
// return result;
//根據(jù)當(dāng)前系統(tǒng)時(shí)間生成圖片名稱
NSDate *date = [NSDate date];
// NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
// [formatter setDateFormat:@"yyyy-MM-dd-HH-mm-ss"];
long time=(long)[date timeIntervalSince1970]; //獲取時(shí)間戳
return [NSString stringWithFormat:@"babyShow/%ld",time];
}
//通過(guò)GET去請(qǐng)求數(shù)據(jù)
+ (NSURLSessionDataTask *)GetDataWithURI:(NSString *)URI Block:(void(^)(id obj,NSError *error))block{
return [[AFAppDotNetAPIClient sharedClient] GET:URI parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
//responseObject 返回的數(shù)據(jù)
block(responseObject,nil);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//NSLog(@"%@",[error localizedDescription]);
block(nil,error);
}];
}