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
OSSClientConfiguration * conf = [OSSClientConfigurationnew];
// 網路請求遇到異常失敗後的重試次數
conf.maxRetryCount = 3;
// 網路請求的超時時間
conf.timeoutIntervalForRequest =
// 允許資源傳輸的最長時間
conf.timeoutIntervalForResource =24 * 60 * 60;
// 你的阿里地址前面通常是這種格式 ……
_client = [[OSSClient alloc] initWithEndpoint:你的阿里地址 credentialProvider:credential];
}
5. 在 ImagePicker 方法中
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary
{
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;
}];
}