美文网首页
(iOS)七牛批量上传图片

(iOS)七牛批量上传图片

作者: Dream_Maker | 来源:发表于2017-04-13 17:30 被阅读165次

由于七牛没有批量上传的方法,找了很多博客,最终完成了批量上传,发篇文章记录一下
借鉴了这位朋友的大部分代码 http://www.jianshu.com/p/cdca6bb059de

TMUploadImageTools.h实现
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <QiniuSDK.h>

@interface TMUploadImageTools : NSObject
//获取七牛上传token
+ (void)getQiniuUploadToken:(void(^)(NSString*token))success failure:(void(^)())failure;
    //单张图片上传
+ (void)uploadImage:(UIImage *)image progress:  (QNUpProgressHandler)progress success:(void(^)(NSString*url))success failure:(void(^)())failure;
    //多张图片上传
+ (void)uploadImages:(NSArray*)imageArray progress:(void(^)(CGFloat))progress success:(void(^)(NSArray*))success failure:(void(^)())failure;

@end

TMUploadImageTools.m实现
#import "TMUploadImageTools.h"
#import <AFNetworking.h>
#import <AFNetworkActivityIndicatorManager.h>
#import "TMQiNiuUploadHelper.h"

#define QiNiuBaseUrl @"http://img.tanrice.com.cn"
#define QiNiuToken  @"ImeNlm03dPkxxBN6JugeFbVQYwaC6TFOsRB-V0F0:4-0UN6C2E1uYYwomG42-P3S_mpI=:eyJzY29wZSI6ImNvbmZpZ2RtIiwiZGVhZGxpbmUiOjE0OTIwNzI3MjJ9"

@implementation TMUploadImageTools
//获取当前时间
+ (NSString *)getDateTimeString{

    NSDateFormatter *formatter;

    NSString *dateString;

    formatter = [[NSDateFormatter alloc]init];

    [formatter setDateFormat:@"yyyy-MM-dd"];

    dateString = [formatter stringFromDate:[NSDate date]];

    return dateString;
}
 //获取随机字符串,用于生成文件名称
 + (NSString*)randomStringWithLength:(int)len{

    NSString * letters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

    NSMutableString * randomString = [NSMutableString stringWithCapacity:len];

    for(int i = 0; i < len; i++){
    
        [randomString appendFormat:@"%C", [letters characterAtIndex:arc4random_uniform((int)[letters length])]];
    
    }
    
     return randomString;
}


+ (void)uploadImage:(UIImage *)image progress:(QNUpProgressHandler)progress success:(void (^)(NSString *))success failure:(void (^)())failure{
{
    
    NSData *data = UIImageJPEGRepresentation(image, 0.01);
    
    if (!data) {
        if (failure) {
            failure();
        }
        return;
    }
    //生成文件名称,调用上面的时间函数,和随机字符串函数
    NSString *fileName = [NSString stringWithFormat:@"%@_%@.png",[TMUploadImageTools getDateTimeString],[TMUploadImageTools randomStringWithLength:8]];
    
    QNUploadOption *option = [[QNUploadOption alloc]initWithMime:nil progressHandler:progress params:nil checkCrc:NO cancellationSignal:nil];
    
    QNUploadManager *manager = [QNUploadManager sharedInstanceWithConfiguration:nil];
    [manager putData:data key:fileName token:QiNiuToken complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
        
        if (info.statusCode == 200 && resp) {
            //成功后返回图片URL
            NSString *url = [NSString stringWithFormat:@"%@/%@",QiNiuBaseUrl,resp[@"key"]];
            if (success) {
                success(url);
            }
        }else{
            if (failure) {
                failure();
            }
            
        }
      } option:option];
    }
}


+ (void)uploadImages:(NSArray*)imageArray progress:(void(^)(CGFloat))progress success:(void(^)(NSArray *))success failure:(void(^)())failure{
NSMutableArray * array = [[NSMutableArray alloc]init];

    __block NSUInteger currentIndex = 0;

    TMQiNiuUploadHelper * uploadHelper = [TMQiNiuUploadHelper sharedUploadHelper];

    __weak typeof(uploadHelper) weakHelper = uploadHelper;

    uploadHelper.singleFailureBlock= ^() {
    
        failure();
    
        return;
    
    };

    uploadHelper.singleSuccessBlock= ^(NSString *url) {
    
    [array addObject:url];
    
    currentIndex++;
    
    if([array count] == [imageArray count]) {
        
        success([array copy]);
        
        return;
        
    }else{
        
        [TMUploadImageTools uploadImage:imageArray[currentIndex] progress:nil success:weakHelper.singleSuccessBlock failure:weakHelper.singleFailureBlock];
        
    }
    
};

    [TMUploadImageTools uploadImage:imageArray[0] progress:nil success:weakHelper.singleSuccessBlock failure:weakHelper.singleFailureBlock];

}



+ (void)getQiniuUploadToken:(void (^)(NSString *))success failure:(void (^)())failure{
    //在这个方法中使用自己的网络工具类获取token
}

TMQiNiuUploadHelper.h

#import <Foundation/Foundation.h>

@interface TMQiNiuUploadHelper : NSObject

@property(copy,nonatomic) void(^singleSuccessBlock)(NSString*);

@property(copy,nonatomic) void(^singleFailureBlock)();

+ (instancetype)sharedUploadHelper;

@end

TMQiNiuUploadHelper.m

#import "TMQiNiuUploadHelper.h"

@implementation TMQiNiuUploadHelper

static id _instance = nil;

+ (id)allocWithZone:(struct _NSZone *)zone {

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{
    
        _instance= [super allocWithZone:zone];
    
    });

    return _instance; 
}

+ (instancetype)sharedUploadHelper {

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{
    
        _instance= [[self alloc]init];
    
    });

    return _instance;
}

- (id)copyWithZone:(NSZone*)zone {

    return _instance;

}
@end

以上的QiNiuBaseUrl是在七牛后台获取,像后台开发人员要,我这个是测试用的


D35A1AD9-A384-4E5A-AD79-83CE09D8BA9F.png

QiNiuToken 也是要通过网络获取,通过调用自己的网络工具类来动态获取token;我这个token是写死的,token会过期,返回info.statusCode == 401。

相关文章

  • (iOS)七牛批量上传图片

    由于七牛没有批量上传的方法,找了很多博客,最终完成了批量上传,发篇文章记录一下借鉴了这位朋友的大部分代码 http...

  • 七牛批量上传图片iOS

    因客户要求,在APP中的图片都是从七牛的服务器中获取的,所以所有的上传图片也要上传到七牛上.又因为服务器不做批量上...

  • iOS 七牛批量、单张上传图片

    七牛目前只支持单张图片长传,多张图片上传的逻辑需要自己完成。 代码:GitHub项目地址 效果 使用方法: 传入获...

  • 客户端生成七牛上传token

    原文地址:客户端生成七牛上传token 在使用七牛iOS SDK上传图片时需要用到上传的token,虽然七牛建议t...

  • iOS-七牛云上传图片:批量

    首先要请求七牛云的token 选择要上传的图片,完成后对图片进行处理,七牛云每次只能上传一张,所以要把对上传图片的...

  • 七牛云图片上传

    七牛云图片上传 可查看七牛云上传图片的SDK

  • 基于NSOperation的串行线程

    基于NSOperation的串行线程 背景介绍:在接入七牛SDK的时候,发现SDK没有批量上传图片的接口,业务又涉...

  • 七牛云上传图片

    1请求后端接口获取上传凭证2请求七牛云地址上传图片到七牛云3上传完毕将获得七牛云返回的图片地址http://www...

  • iOS批量上传图片

    这是使用 把方法放在 AFHTTPSessionManager 中 af 3.x版本 这个版本 把这个...

  • iOS七牛上传图片总结

    1.图片的不同状态显示 解决方法一: 这只是刚入坑而已.这样做存在一个问题:本地路径,网络路径同时存在的话有两种可...

网友评论

      本文标题:(iOS)七牛批量上传图片

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