美文网首页
AliyunOSSiOS封装实践 2022-04-25 周一

AliyunOSSiOS封装实践 2022-04-25 周一

作者: 勇往直前888 | 来源:发表于2022-04-28 11:05 被阅读0次

    简介

    以前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要你自己拼接,阿里云竟然不告诉你,真是无语。

    • 在这个回调中,再发起一次后台的接口,告诉后台上传成功,并把你拼接的图片位置告诉你的后台。

    小结

    • 这个过程涉及到三方配合,比较复杂。

    • 幸好提供了例子代码,抄抄也能用。

    • 让人无语的是,基本的多线程都不注意,有低级的缺陷。

    相关文章

      网友评论

          本文标题:AliyunOSSiOS封装实践 2022-04-25 周一

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