2018/6/6 15:48:29当前位置推荐好文阿里云教程浏览文章

一.准备工作
1.上阿里云的网站里下载sdk:网址为:https://help.aliyun.com/document_detail/32060.html?spm=5176.doc32059.6.296.QgohfC。demo地址 aliyun/aliyun-oss-ios-sdk

  1. 把demo中的AliyunOSSiOS.framework拖入工程
  2. 导入头文件#import <AliyunOSSiOS/OSSService.h>
  3. 初始化阿里云@property (strong, nonatomic) OSSClient client;

二.直接讲解封装好的上传阿里云的文件
1.AliyunOSSUpload.h文件

#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>#define AliyunUpload                [AliyunOSSUpload aliyunInit]typedef enum{    ENT_fileImageHeader,//头像    ENT_fileImageBody,//个人图片    ENT_fileImageProject,//门店图片    ENT_fileImageJs,//技师展现图片    ENT_fileItemImageBody,//门店项目图片}FileType;@interface AliyunOSSUpload : NSObject+(AliyunOSSUpload )aliyunInit;-(void)uploadImage:(NSArray)imgArr   FileDirectory:(FileType)type  success:(void (^)(NSString obj))success;@end

根据公司需要上面我定义一个枚举,返回不同图片的大小。

2.AliyunOSSUpload.m文件

#import <AliyunOSSiOS/OSSService.h>#import <AliyunOSSiOS/OSSCompat.h>#import "AliyunOSSUpload.h"//#import "NSObject+SBJSON.h"NSString  const AccessKey = @"";NSString  const SecretKey = @"";NSString  const endPoint = @"https://oss-cn-qingdao.aliyuncs.com/";OSSClient  client;@implementation AliyunOSSUploadstatic AliyunOSSUpload _config;+(AliyunOSSUpload )aliyunInit{    @synchronized(self){        if (_config==nil) {            [OSSLog enableLog];                        _config=[[AliyunOSSUpload alloc] init];            id<OSSCredentialProvider> credential = [[OSSPlainTextAKSKPairCredentialProvider alloc] initWithPlainTextAccessKey:AccessKey                                                                                                                    secretKey:SecretKey];                                    client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential];        }    }    return _config;}-(void)uploadImage:(NSArray)imgArr   FileDirectory:(FileType)type  success:(void (^)(NSString obj))success{    NSMutableArray imgArray=[NSMutableArray new];    for (int i=0; i<imgArr.count; i++) {        NSData data;                NSDictionary imgDictionary = [imgArr objectAtIndex:i];        NSArray imgValue = [imgDictionary allValues];        NSArray imgKey = [imgDictionary allKeys];        UIImage image1 = [imgValue objectAtIndex:0];        NSString str = [imgKey objectAtIndex:0];        UIImage image=[IHUtility rotateAndScaleImage:image1 maxResolution:(int)kScreenWidth2];        OSSPutObjectRequest  put = [OSSPutObjectRequest new];        put.contentType=@"image/jpeg";        put.bucketName = @"yijiao";        NSString imgName;        if (type==ENT_fileImageHeader) {            NSData data1=UIImageJPEGRepresentation(image, 1);            float length1 = [data1 length]/1024;            if (length1<600) {                data = UIImageJPEGRepresentation(image, 1);            }else{                if ([IHUtility IsEnableWIFI]) {                    data = UIImageJPEGRepresentation(image, 0.6);                }else{                    data = UIImageJPEGRepresentation(image, 0.5);                }            }                        imgName=[NSString stringWithFormat:@"ios/header/header_%@.jpg",[IHUtility getTransactionID]];        }else if (type==ENT_fileImageBody){            NSData data1=UIImageJPEGRepresentation(image, 1);            float length1 = [data1 length]/1024;            if (length1<600) {                data = UIImageJPEGRepresentation(image, 1);            }else{                data = UIImageJPEGRepresentation(image, 0.5);            }            imgName=[NSString stringWithFormat:@"ios/content/body_%@/%@.jpg",str,[IHUtility getNowTimeTimestamp]];        }else if (type==ENT_fileImageJs)        {            NSData data1=UIImageJPEGRepresentation(image, 1);            float length1 = [data1 length]/1024;            if (length1<600) {                data = UIImageJPEGRepresentation(image, 1);            }else{                data = UIImageJPEGRepresentation(image, 0.5);                            }            imgName=[NSString stringWithFormat:@"js/header/header_%@.jpg",[IHUtility getTransactionID]];        }else if (type==ENT_fileImageProject){            NSData data1=UIImageJPEGRepresentation(image, 1);            float length1 = [data1 length]/1024;            if (length1<600) {                data = UIImageJPEGRepresentation(image, 1);            }else{                data = UIImageJPEGRepresentation(image, 0.5);            }            imgName=[NSString stringWithFormat:@"ios/storePicture/web_%@/%@.jpg",str,[IHUtility getNowTimeTimestamp]];        }else if (type==ENT_fileItemImageBody){            NSData data1=UIImageJPEGRepresentation(image, 1);            float length1 = [data1 length]/1024;            if (length1<600) {                data = UIImageJPEGRepresentation(image, 1);            }else{                data = UIImageJPEGRepresentation(image, 0.5);            }            imgName=[NSString stringWithFormat:@"ios/web/itemBody_%@/%@.jpg",str,[IHUtility getNowTimeTimestamp]];        }        put.objectKey = imgName;        put.uploadingData = data; // 直接上传NSData                put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {            NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);        };                NSString imgWidth;        NSString imgHeigh;        if (type==ENT_fileImageHeader) {            imgWidth=[NSString stringWithFormat:@"%d",(int)kScreenWidth];            imgHeigh=[NSString stringWithFormat:@"%d",(int)kScreenWidth];                    }        else if (type==ENT_fileImageBody){            imgWidth=[NSString stringWithFormat:@"%lf",image.size.width];            imgHeigh=[NSString stringWithFormat:@"%lf",image.size.height];        } else if (type==ENT_fileImageJs){            imgWidth=[NSString stringWithFormat:@"%lf",image.size.width];            imgHeigh=[NSString stringWithFormat:@"%lf",image.size.height];        }else if (type==ENT_fileImageProject){            imgWidth=[NSString stringWithFormat:@"%lf",image.size.width];            imgHeigh=[NSString stringWithFormat:@"%lf",image.size.height];        }else if (type==ENT_fileItemImageBody){            imgWidth=[NSString stringWithFormat:@"%lf",image.size.width];            imgHeigh=[NSString stringWithFormat:@"%lf",image.size.height];        }                NSDictionary dic=[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"/%@",imgName],@"t_url",                           imgWidth,@"t_width",                           imgHeigh,@"t_height",                           nil];        [imgArray addObject:dic];                if (client==nil) {            id<OSSCredentialProvider> credential = [[OSSPlainTextAKSKPairCredentialProvider alloc] initWithPlainTextAccessKey:AccessKey                                                                                                                    secretKey:SecretKey];                        client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential];        }                OSSTask  putTask = [client putObject:put];                [putTask continueWithBlock:^id(OSSTask task) {            if (!task.error) {                NSLog(@"upload object success!");                if (type==ENT_fileImageHeader) {                    NSString str=[NSString stringWithFormat:@"/%@",imgName];                    success(str);                }                else if (type==ENT_fileImageBody){                    if (i==imgArr.count-1) {                        NSString str=[imgArray JSONRepresentation];                        success(str);                    }                }else if (type==ENT_fileImageJs){                    success(imgName);                }                else if (type==ENT_fileImageProject){                    if (i==imgArr.count-1) {                        NSString str=[imgArray JSONRepresentation];                        success(str);                    }                }else if (type==ENT_fileItemImageBody){                    success(imgName);                }            } else{                [YJTipView showBottomWithText:@"图片上传失败,请重试" bottomOffset:300 duration:1.5f];                NSLog(@"upload object failed, error: %@" , task.error);            }            return nil;        }];    }}

想上传到阿里,首先要有对应的阿里的账号参数,填写到这里

NSString  const AccessKey = @"";NSString  const SecretKey = @"";

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

Bucket名称, Object名称

 put.bucketName = @"自己的数据"; put.objectKey = @"自己的数据";

data上传

put.uploadingData = self.imageData;//自己的NSData数据

上传的时候你也能看一看你的上传进度,还有少量参数配置

put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {            NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);//当前上传段长度、当前已经上传总长度、一共需要上传的总长度        };

我没有按照官方说的加上这句:

task = [client presignPublicURLWithBucketName:@"同上面的bucketName"withObjectKey:同上];

由于上传阿里云的时候,上传的图片命名不可以相同,所以利使用了随机数,和时间戳的方法

随机数方法:

//随机数+ (NSString)getTransactionID{    NSDate date = [NSDate date];    NSMutableString strDate = [NSMutableString stringWithFormat:@"%@", date];    NSString s1=[strDate stringByReplacingOccurrencesOfString:@"-" withString:@""];    NSString s2= [s1 stringByReplacingOccurrencesOfString:@" " withString:@""];    NSString s3= [s2 stringByReplacingOccurrencesOfString:@":" withString:@""];    int n = (arc4random() % 9000) + 1000;    NSMutableString transactionID = [NSMutableString stringWithString:[s3 substringToIndex:14]];    [transactionID appendString:[NSString stringWithFormat:@"%d", n]];        [transactionID stringByReplacingOccurrencesOfString:@" " withString:@""];    return transactionID;}

时间戳方法:

//获取当前时间戳+(NSString )getNowTimeTimestamp{    NSDate dat = [NSDate dateWithTimeIntervalSinceNow:0];    NSTimeInterval a=[dat timeIntervalSince1970];    NSStringtimeString = [NSString stringWithFormat:@"%0.f", a];//转为字符型    return timeString;}

三.在调使用相册的地方引使用方法

[AliyunUpload uploadImage:headImageArray FileDirectory:ENT_fileItemImageBody success:^(NSString obj) {            _pictureStr =obj ;//就是上传后的名称            dispatch_sync(dispatch_get_main_queue(), ^{            });        }];

最后:奉献上我的demo( dt8888/TestView),有不足的地方,随时指教。

网友评论