iOS 阿里云图片上传

2019-02-12  本文已影响14人  iOS小武哥
直接上代码:

阿里云上传图片,首先先从后台获取AccessKeyId AccessKeySecret SecurityToken 用这三个值调阿里云上传图片API

1.首先我们新建一个类:AliyunOSSUpload 继承NSObject

.h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#define AliyunUpload                [AliyunOSSUpload aliyunInit]

@interface AliyunOSSUpload : NSObject

+(AliyunOSSUpload *)aliyunInit;
/*
imgArr 图片数组
imagesObject 图片名称(需要和后台商量图片名称的格式)
*/
-(void)uploadImage:(NSArray*)imgArr imagesObject:(NSArray *)imagesObject success:(void (^)(NSString *obj))success;
@end

.m

#import <AliyunOSSiOS/OSSService.h>
#import <AliyunOSSiOS/OSSCompat.h>
#import "AliyunOSSUpload.h"
#import "IHUtility.h" //就是对图片名字的操作
#import "NSObject+SBJSON.h"

NSString * const endPoint = @"";

OSSClient * client;
@implementation AliyunOSSUpload
static AliyunOSSUpload *_config;

+(AliyunOSSUpload *)aliyunInit{
    @synchronized(self){
        if (_config==nil) {
            [OSSLog enableLog];
            _config=[[AliyunOSSUpload alloc] init];
            
            id<OSSCredentialProvider> credential = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:@"服务器获取" secretKeyId:@"服务器获取" securityToken:@"服务器获取"];
            client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential];
        }
    }
    return _config;
}



-(void)uploadImage:(NSArray*)imgArr imagesObject:(NSArray *)imagesObject success:(void (^)(NSString *obj))success{
    NSMutableArray *imgArray=[NSMutableArray new];
    for (int i=0; i<imgArr.count; i++) {
        NSData* data;

        UIImage *image1 = (UIImage *)imgArr[i];
        UIImage *image=[IHUtility rotateAndScaleImage:image1 maxResolution:(int)ScreenWidth*2];
        OSSPutObjectRequest * put = [OSSPutObjectRequest new];
        put.contentType=@"image/jpeg";
        put.bucketName = @"跟后台要";
        NSString *imgName;
            NSData *data1=UIImageJPEGRepresentation(image, 1);
            float length1 = [data1 length]/1024;
            if (length1<600) {
                data = UIImageJPEGRepresentation(image, 1);
            }else{
                data = UIImageJPEGRepresentation(image, 0.5);
            }
              //保证和服务器的文件名字一样
              imgName = imagesObject[i];
        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;
            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 = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:@"服务器获取" secretKeyId:@"服务器获取" securityToken:@"服务器获取"];
            
            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_fileImageProject){
                    if (i==imgArr.count-1) {
                        NSString *str=[imgArray JSONRepresentation];
                        success(str);
                    }
                }
                
            } else{
                NSLog(@"upload object failed, error: %@" , task.error);
                [SVProgressHUD showErrorWithStatus:@"图片上传失败!"];
            }
            return nil;
        }];
    }
}

@end
上一篇 下一篇

猜你喜欢

热点阅读