iOS版上传数据到阿里后台~ AliyunOSSiOS(转载自http://www.jianshu.com/p/27435fe627be)
来源:互联网 发布:王者荣耀kda算法 编辑:程序博客网 时间:2024/06/15 19:59
前言
我们用的阿里的存储服务,在我们上传头像的时候。伟大的后台告诉我,前台应该直接向阿里传递数据,这样的路径是:iOS端—>阿里。以往我们的传递路径都是:iOS端—>后台—>阿里。所以我刚刚经过抗日战争的喜悦,又要奔向朝鲜的战场。但是我去网上查了一下,关于iOS端直接上传数据到阿里的知识真的很少,查了好久也是没有结果。最后不得不向阿里技术人员请求支援。最终,胜利了。在此,把我的辛苦路写出来,为了大家以后的少走弯路。不用谢我,我是LF.
正文
首先,给大家阿里sdk的github地址,在这里你可以下载他们的idk,看一下他们的介绍。
我的Demo的地址,大家可以看一下,配置好自己的阿里参数可以直接上传测试。
然后,开始代码(以上传一个相册图片为例)
想上传到阿里,首先要有对应的阿里的账号参数,填写到这里
NSString * const AccessKey = @"";
NSString * const SecretKey = @"";
OSSClient是OSS服务的iOS客户端,它为调用者提供了一系列的方法,用于和OSS服务进行交互。一般来说,全局内只需要保持一个OSSClient,用来调用各种操作。
上面这一句是阿里的说法,那我们就听从人家的建议吧:
@interface ViewController ()<UIImagePickerControllerDelegate,UINavigationControllerDelegate>
{
OSSClient * client;
}
用明文AK/SK实现的加签器(官方建议只在测试模式时使用)
NSString *endpoint = @"自己的参数";//比如http://ios.ali.comidcredential = [[OSSPlainTextAKSKPairCredentialProvider alloc] initWithPlainTextAccessKey:AccessKey secretKey:SecretKey];
client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credential];
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
Bucket名称, Object名称
put.bucketName = @"自己的数据";
put.objectKey = @"自己的数据";
上传数据,有两种方式:
1.data上传
put.uploadingData = self.imageData;//自己的NSData数据
2.上传路径
put.uploadingFileURL = [NSURL fileURLWithPath:fullPath];
当然,上传的时候你也可以看一看你的上传进度,还有一些参数配置(这一步不是必须的):
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
所有调用api的操作,都会立即获得一个OSSTask。这是官方的说法。这一步是最重要的一步,成不成功就看他了。
OSSTask * putTask = [client putObject:put];
[putTask continueWithBlock:^id(OSSTask *task) {
task = [client presignPublicURLWithBucketName:@"同上面的bucketName"
withObjectKey:同上];
NSLog(@"objectKey: %@", put.objectKey);
if (!task.error) {
OSSPutObjectResult * result = task.result;
NSLog(@"upload object success!");
NSLog(@"Result - requestId: %@",
result.requestId);
} else {
NSLog(@"upload object failed, error: %@" , task.error);
OSSPutObjectResult * result = task.result;
NSLog(@"requestId: %@",
result.requestId);
}
return nil;
}];
好了,这就是全部的上传的代码。关于最后一步我要说一下,官方给的代码是:
OSSTask * putTask = [client putObject:put];
[putTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"upload object success!");
} else {
NSLog(@"upload object failed, error: %@" , task.error);
}
return nil;
}];
没有这一句代码:
task = [client presignPublicURLWithBucketName:@"同上面的bucketName"
withObjectKey:同上];
你自己可以试一下,反正我的按照官方说的那种不行。
还有一个注意点,xcode7的如果用的http请求,别忘了设置ATS.
原文链接:http://www.jianshu.com/p/27435fe627be
- iOS版上传数据到阿里后台~ AliyunOSSiOS(转载自http://www.jianshu.com/p/27435fe627be)
- iOS版上传数据到阿里后台(AliyunOSSiOS)
- 转载自http://www.jianshu.com/p/77e811e1c987
- iOS NSNotificationCenter 使用姿势详解 转载地址http://www.jianshu.com/p/a4d519e4e0d5
- http://www.jianshu.com/p/cf446be43ae8
- http://www.jianshu.com/p/2ca7767df08c
- http://www.jianshu.com/p/20d5fb4cd76d
- http://www.jianshu.com/p/a8cce94d508e
- http://www.jianshu.com/p/b763434fd33a
- http://www.jianshu.com/p/a5c0844a0590
- http://www.jianshu.com/p/562387a85eeb
- http://www.jianshu.com/p/94e0f9ab3f1d
- http://www.jianshu.com/p/55458caf0814
- http://www.jianshu.com/p/7e46fe7485bb
- influxdb介绍,安装,使用等(转载:http://www.jianshu.com/p/d2935e99006e)
- iOS App图标和启动画面尺寸http://www.jianshu.com/p/adpKye
- http://www.jianshu.com/p/584707554ed7?ref=myread
- vim安装:http://www.jianshu.com/p/a0b452f8f720
- 初识策略模式
- WaitForSingleObject与WaitForMultipleObjects用法详解
- DIY自己的虚拟现实世界
- 【HNOI2016】最小公倍数
- 浅谈Facebook的服务器架构
- iOS版上传数据到阿里后台~ AliyunOSSiOS(转载自http://www.jianshu.com/p/27435fe627be)
- 论Acmer的自我修养 (算法学习目标和推荐题目)
- Ubuntu Server 11.04 安装 Oracle 11g r2 图解教程
- hdu1171Big Event in HDU(母函数或多重背包)
- 成员变量和局部变量同名 / 局部变量的作用域最小化
- poj 3459(背包问题)
- 42数据库类
- 堆和栈的区别
- python中self的作用