阿里云数据存储
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;
}