#import "AlyCommitImageTool.h"
#import <AliyunOSSiOS/OSSService.h>
@interface AlyCommitImageTool(){
NSMutableArray *imageArray;//圖片數(shù)組
NSMutableArray *imageNameArray;//圖片名字?jǐn)?shù)組
NSMutableArray *imagePathArray;//圖片路徑數(shù)組
NSMutableArray *imagePutObjectArray;//圖片上傳數(shù)組
NSInteger currentCommitIndex;
}
@property (strong, nonatomic) OSSClient *aliOssClient;
@end
@implementation AlyCommitImageTool
-(id)init{
if(self=[super init]){
imageArray=[[NSMutableArray alloc]init];
imageNameArray=[[NSMutableArray alloc]init];
imagePathArray=[[NSMutableArray alloc]init];
imagePutObjectArray=[[NSMutableArray alloc]init];
}
return self;
}
//阿里云 oss 上傳于下載實(shí)體
- (OSSClient *)aliOssClient
{
if (!_aliOssClient) {
//判斷服務(wù)端是否返回key和id
if(KgetUserValueByParaName(@"AccessKey")&& KgetUserValueByParaName(@"AccessId")){
id<OSSCredentialProvider> credential = [[OSSPlainTextAKSKPairCredentialProvider alloc] initWithPlainTextAccessKey:KgetUserValueByParaName(@"AccessId") secretKey: KgetUserValueByParaName(@"AccessKey")];
_aliOssClient = [[OSSClient alloc] initWithEndpoint:OSS_ENDPOINT credentialProvider:credential];
}else{
id<OSSCredentialProvider> credential = [[OSSPlainTextAKSKPairCredentialProvider alloc] initWithPlainTextAccessKey:OSS_ACCESSKEYID secretKey: OSS_ACCESSKEYSERCET];
_aliOssClient = [[OSSClient alloc] initWithEndpoint:OSS_ENDPOINT credentialProvider:credential];
}
}
return _aliOssClient;
}
- (void)uploadImages:(NSArray<UIImage *> *)images isAsync:(BOOL)isAsync fromWhere:(NSString *)path complete:(void(^)(NSArray<NSString *> *names, UploadImageState state))complete
{
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
queue.maxConcurrentOperationCount = images.count;
NSMutableArray *callBackNames = [NSMutableArray array];
int i = 0;
for (UIImage *image in images) {
if (image) {
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
//任務(wù)執(zhí)行
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
put.bucketName = XinHuaAppDelegate.initialObj.UploadBucket;
// 路徑格式:NSString *imageName =@"Party/2/110038/ClientUpload/2017/03/23/201703231234.jpg";
int aRandomNum = arc4random()%9996;
NSDate *now = [NSDate date];
NSLog(@"now date is: %@", now);
NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:now];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYYMMdd"];
NSString *dateStr = [formatter stringFromDate:[NSDate date]];
NSString *filePath = [NSString stringWithFormat:@"%@%d",dateStr,aRandomNum];
NSString *imageName =[NSString stringWithFormat:@"%@%@/%ld/%ld/%ld/%@.jpg",XinHuaAppDelegate.initialObj.UploadRoot,path,(long)[dateComponent year],(long)[dateComponent month],(long)[dateComponent day],filePath];
NSString *imageNamePath=imageName;
//如果第一個(gè)字符是/ 則去除
if([[imageName substringToIndex:1]isEqualToString:@"/"]){
imageName=[imageName substringFromIndex:1];
}else{
}
put.objectKey = imageName;
[callBackNames addObject:imageNamePath];
// NSData *data = UIImageJPEGRepresentation(image, 0.3);
NSData *data = [self imageData:image];
put.uploadingData = data;
OSSTask * putTask = [self.aliOssClient putObject:put];
[putTask waitUntilFinished]; // 阻塞直到上傳完成
if (!putTask.error) {
NSLog(@"upload object success!");
} else {
NSLog(@"upload object failed, error: %@" , putTask.error);
}
if (isAsync) {
if (image == images.lastObject) {
NSLog(@"upload object finished!");
if (complete) {
complete([NSArray arrayWithArray:callBackNames] ,UploadImageSuccess);
}
}
}
}];
if (queue.operations.count != 0) {
[operation addDependency:queue.operations.lastObject];
}
[queue addOperation:operation];
}
i++;
}
if (!isAsync) {
[queue waitUntilAllOperationsAreFinished];
NSLog(@"haha");
if (complete) {
if (complete) {
complete([NSArray arrayWithArray:callBackNames], UploadImageSuccess);
}
}
}
}
-(NSData *)imageData:(UIImage *)myimage
{
NSData *data=UIImageJPEGRepresentation(myimage, 1.0);
if (data.length>100*1024) {
if (data.length>1024*1024) {//1M以及以上
// data = [self compressImage:myimage toMaxFileSize:512*1024/5];
data=[self resetSizeOfImageData:myimage maxSize:512*1024/5];
// data=UIImageJPEGRepresentation(myimage, 0.1);
}else if (data.length>512*1024) {//0.5M-1M
data=UIImageJPEGRepresentation(myimage, 0.5);
}else if (data.length>200*1024) {//0.25M-0.5M
data=UIImageJPEGRepresentation(myimage, 0.9);
}
}
return data;
}
//壓縮圖片處理(先調(diào)整分辨率)
-(NSData*)resetSizeOfImageData:(UIImage*)sourceImage maxSize:(NSInteger)maxSize
{
//優(yōu)先調(diào)整分辨率
CGSize newSize=CGSizeMake(sourceImage.size.width, sourceImage.size.height);
CGFloat tempHeight=newSize.height/1024;
CGFloat tempWidth=newSize.width/1024;
// if (tempWidth>1.0&&tempWidth>tempHeight) {
newSize=CGSizeMake(sourceImage.size.width/tempWidth, sourceImage.size.height/tempHeight);
// }
UIGraphicsBeginImageContext(newSize);
[sourceImage drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//再調(diào)整大小
NSData *imageData=UIImageJPEGRepresentation(newImage, 0.4);
NSUInteger sizeOrigin=[imageData length];
NSUInteger sizeOriginKB=sizeOrigin/1024;
if (sizeOriginKB>maxSize) {
NSData *finalImageData=UIImageJPEGRepresentation(newImage, 0.5);
return finalImageData;
}
NSLog(@"#####***%lu",(unsigned long)imageData.length);
return imageData;
}
@end
ios 阿里云oss多線程上傳圖片
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 這個(gè)是有個(gè)朋友問我上傳圖片到阿里云存儲(chǔ)OSS功能怎么做? 我看了很多文檔其實(shí)大概原理和email差不多, 主要你要...
- 前言 1.網(wǎng)絡(luò)請求 系統(tǒng)請求的方法 分為get請求和post請求1.1、get請求系統(tǒng)提供了兩種方法,一種是Req...