AliyunOSSiOS封装实践 2022-04-25 周一
2022-04-28 本文已影响0人
勇往直前888
简介
以前APP的照片基本上用AFNetworking往自己的后台传的,就是那个著名的formData的接口。不过,现在的图片越来越多存到阿里云。这样的话,就是APP和阿里云之间直接联系,照片上传之后再来个接口告诉后台文件位置就好了。
Step1 集成AliyunOSSiOS三方库
-
不管好不好用,反正要上传阿里云,只能用它。访问官网,看帮助链接,基本就可以用了。官网帮助链接
-
在Podfile中加一行
pod 'AliyunOSSiOS'
,install一下就可以了。
Step2 从后台拿初始化参数
连接你的后台,从后台拿初始化需要的参数,基本需要以下几个字段:
{
"accessKeyId": "STS.xx",
"accessKeySecret": "xx",
"expiration": "2021-09-08T06:33:37Z",
"securityToken": "xxxx"
}
Step3 初始化
- 官网上代码有的抄的,官网链接
NSString *endpoint = @"https://oss-cn-hangzhou.aliyuncs.com";
// 移动端建议使用STS方式初始化OSSClient。
id<OSSCredentialProvider> credential = [[OSSFederationCredentialProvider alloc] initWithFederationTokenGetter:^OSSFederationToken * _Nullable{
OSSFederationToken *token = [OSSFederationToken new];
// 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
token.tAccessKey = @"AccessKeyId";
token.tSecretKey = @"AccessKeySecret";
// 从STS服务获取的安全令牌(SecurityToken)。
token.tToken = @"SecurityToken";
// 临时访问凭证的过期时间。
token.expirationTimeInGMTFormat = @"Expiration";
return token;
}];
client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credential];
- 把上面那些信息换成你们自己以及上一步从后台拿到的,就可以了。
简单上传
-
直接抄官网的代码就可以了。官网位置
-
官网中通过//注释的代码尽量不要打开,没什么用。
-
文件路径,以及上传成功后返回给你的urlString是两个比较重要的东西,用点心搞清楚基本就可以了。
-
// [putTask waitUntilFinished]; 这句要打开。并且上传过程是比较耗时的,这里用一下最简单的线程就可以了。
-
上传进度:说是可选,其实是必须的。我曾经先设为nil,结果不行。
// (可选)设置上传进度。
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
// 指定当前上传长度、当前已经上传总长度、待上传的总长度。
NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
这里的log可以去掉,没用,保持一个空的block就可以了。如果实在想做点东西,这里可以做个进度条。不过大多数情况都很快,作用不大。
Step4:告知后台
[putTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"upload object success!");
} else {
NSLog(@"upload object failed, error: %@" , task.error);
}
return nil;
}];
-
这一段就是上传结束后的代码。比较无语。
-
这个block是上传结束后的回调,最好加一个切回主线程执行。不然由于修改UI而导致崩溃就悲剧了。
-
告诉后台的url要你自己拼接,阿里云竟然不告诉你,真是无语。
-
在这个回调中,再发起一次后台的接口,告诉后台上传成功,并把你拼接的图片位置告诉你的后台。
小结
-
这个过程涉及到三方配合,比较复杂。
-
幸好提供了例子代码,抄抄也能用。
-
让人无语的是,基本的多线程都不注意,有低级的缺陷。