1. 程式人生 > >iOS 阿里雲上傳圖片

iOS 阿里雲上傳圖片


1.上阿里雲的網站裡下載sdk, 網址:

https://help.aliyun.com/document_detail/32060.html?spm=5176.doc32059.6.296.QgohfC

2. 把demo中的AliyunOSSiOS.framework拖入工程

3.匯入標頭檔案

#import <AliyunOSSiOS/OSSService.h>

4.初始化阿里雲

@property (strong, nonatomic) OSSClient *client;

- (void)initALi

{

    id<OSSCredentialProvider

> credential = [[OSSPlainTextAKSKPairCredentialProvider alloc] initWithPlainTextAccessKey:@“your key” secretKey:@“your secretKey”];

OSSClientConfiguration * conf = [OSSClientConfigurationnew];

// 網路請求遇到異常失敗後的重試次數

    conf.maxRetryCount = 3;

// 網路請求的超時時間

    conf.timeoutIntervalForRequest =

30;

// 允許資源傳輸的最長時間

    conf.timeoutIntervalForResource =24 * 60 * 60;

// 你的阿里地址前面通常是這種格式 ……

    _client = [[OSSClient alloc] initWithEndpoint:你的阿里地址 credentialProvider:credential];

}

5. 在 ImagePicker 方法中

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary

*)info

{

UIImage *img = [info objectForKey:UIImagePickerControllerEditedImage];

    [selfperformSelector:@selector(saveImage:) withObject:img afterDelay:0.1];

}

- (void)saveImage:(UIImage *)image {

    BOOL success;

NSFileManager *fileManager = [NSFileManagerdefaultManager];

    NSError *error;

NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];

    // 圖片名

    NSString *imageName = [NSStringstringWithFormat:@"%@.jpg", [[NSUUIDUUID] UUIDString]];

    NSString *imageFilePath = [documentsDirectorystringByAppendingPathComponent:[NSStringstringWithFormat:@"%@", imageName]];

    success = [fileManager fileExistsAtPath:imageFilePath];

    if(success) {

        [fileManager removeItemAtPath:imageFilePatherror:&error];

    }

    UIImage *smallImage = [selfthumbnailWithImageWithoutScale:image size:CGSizeMake(93,93)];

    [UIImageJPEGRepresentation(smallImage,0.3)writeToFile:imageFilePathatomically:YES];

    UIImage *selfPhoto = [UIImageimageWithContentsOfFile:imageFilePath];//讀取圖片檔案

    NSData *ImageData =UIImagePNGRepresentation(selfPhoto);

    [self updateToALi:ImageDataimageName:imageName];

}

// 改變圖片尺寸

-(UIImage *)thumbnailWithImageWithoutScale:(UIImage *)image size:(CGSize)asize

{

    UIImage *newimage;

    if (nil == image) {

        newimage = nil;

    }

    else{

        CGSize oldsize = image.size;

        CGRect rect;

        if (asize.width/asize.height > oldsize.width/oldsize.height) {

            rect.size.width = asize.height*oldsize.width/oldsize.height;

            rect.size.height = asize.height;

            rect.origin.x = (asize.width - rect.size.width)/2;

            rect.origin.y =0;

        }

        else{

            rect.size.width = asize.width;

            rect.size.height = asize.width*oldsize.height/oldsize.width;

            rect.origin.x =0;

            rect.origin.y = (asize.height - rect.size.height)/2;

        }

UIGraphicsBeginImageContext(asize);

CGContextRef context =UIGraphicsGetCurrentContext();

CGContextSetFillColorWithColor(context, [[UIColorclearColor] CGColor]);

        UIRectFill(CGRectMake(0,0, asize.width, asize.height));//clear background

        [image drawInRect:rect];

        newimage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

    }

    return newimage;

}


5. 上傳圖片

- (void)updateToALi:(NSData *)data imageName:(NSString *)imageName

{

    OSSPutObjectRequest * put = [OSSPutObjectRequestnew];

    put.bucketName =你的bucketName;

    put.objectKey = 你的圖片名;

    put.uploadingData = data; // 直接上傳NSData

    put.uploadProgress = ^(int64_t bytesSent,int64_t totalByteSent, int64_t totalBytesExpectedToSend) {

        NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);

    };

    OSSTask * putTask = [_clientputObject:put];

    // 上傳阿里雲

    [putTask continueWithBlock:^id(OSSTask *task) {

        if (!task.error) {

NSLog(@"upload object success!");

        } else {

NSLog(@"upload object failed, error: %@" , task.error);

        }

        return nil;

    }];

}