阿里云数据存储

2017-08-10  本文已影响0人  小DB
之前项目中需要用到阿里云数据存储,在网上参考,自己做个记录,便于日后查阅。

oss是阿里云推出的图片存储服务,在项目开发过程中用到的图片上传,就可以直接放到阿里云的oss中,这样不仅可以节省我们项目本身的使用空间,同时当项目中的图片进行迁移的时候,也不会导致图片丢失的情况;

1.https://www.aliyun.com登录阿里云,开通oss图片存储(如果你还没有账号需要先注册获取Access Key ID和Access Key Secret)

2.新建bucket(注意命名空间,最好设置公共读写)

3.阿里云的账号信息

NSString * const AccessKey = @"";

NSString * const SecretKey = @"";

4.使用cocoa pods 引入阿里云的SDK,AliyunOSSiOS

5.OSSClient是OSS服务的iOS客户端,它为调用者提供了一系列的方法,用于和OSS服务进行交互。一般来说,全局内只需要保持一个OSSClient,用来调用各种操作。

@interface ViewController ()<UIImagePickerControllerDelegate, UINavigationControllerDelegate>
{
    OSSClient *client;
}
@end

6.用明文AK/SK实现的加签器(官方建议只在测试模式时使用)

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
    UIImage *image = info[UIImagePickerControllerOriginalImage];
    
    [picker dismissViewControllerAnimated:YES completion:^{
        
    }];
    if (UIImagePNGRepresentation(image)) {
        self.imageData = UIImagePNGRepresentation(image);
    }else {
        self.imageData = UIImageJPEGRepresentation(image, 0.1);
    }
    //参数设置
     NSString *endpoint = @"http://******.com";
    //CredentialProvider协议,要求实现加签接口
    //用明文AK/SK实现的加签器,建议只在测试模式时使用
    id<OSSCredentialProvider> credential = [[OSSPlainTextAKSKPairCredentialProvider alloc]initWithPlainTextAccessKey:AccessKey secretKey:SecretKey];
    client = [[OSSClient alloc]initWithEndpoint:endpoint credentialProvider:credential];
    //OSSClient可以设置的参数
    OSSClientConfiguration *config = [[OSSClientConfiguration alloc]init];
    /**
     最大重试次数
     */
    config.maxRetryCount = 2;
     /**
     请求超时时间
     */
    config.timeoutIntervalForRequest = 30;
     /**
     单个Object下载的最长持续时间
     */
    config.timeoutIntervalForResource = 60*60;
    client.clientConfiguration = config;
     /**
     上传Object的请求头
     */
    OSSPutObjectRequest *put = [[OSSPutObjectRequest alloc]init];
     /**
     Bucket名称
     */
    put.bucketName = @"***";
     /**
      从内存中的NSData上传时,通过这个字段设置
     */
    put.uploadingData = self.imageData;
    NSString *objectKey = [NSString stringWithFormat:@"123_ios_326/%@.jpg",[self getTimeNow]];
     /**
     Object名称
     */
    put.objectKey = objectKey;
    OSSTask *putTask = [client putObject:put];
    [putTask continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) {
        task = [client presignPublicURLWithBucketName:put.bucketName withObjectKey:put.objectKey];
        NSLog(@"objectKey: %@", put.objectKey);
        if (!task.error) {
            NSLog(@"上传成功");
        } else {
            NSLog(@"上传失败%@" , task.error);
        }
        return nil;
    }];
}
- (NSString *)getTimeNow
{
    NSDate *datenow = [NSDate date];//现在时间
    NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[datenow timeIntervalSince1970]];
    return timeSp;
}

原文参考链接:http://www.jianshu.com/p/27435fe627be

上一篇下一篇

猜你喜欢

热点阅读