iOS 아리운 대상 저장 OSS 파일 업로드/다운로드 실현

9399 단어 iOS 개발
이전 프로젝트에서 이미지 음성 등 자원 파일은 서버에 직접 데이터를 업로드하고 서버에 처리하고 저장했다.최근의 이 프로젝트는 서버가 직접 OSS를 열고 클라이언트가 아리운이 제공하는 업로드 다운로드 기능을 사용하여 자원을 업로드하고 다운로드한다.아리운은 그림을 잘 처리하여 크기를 그림을 얻을 때 사용자 정의할 수 있다.먼저 프로젝트에서 아리운 OSS의 라이브러리를 가져오고pod에 다음과 같은 코드를 추가합니다.
pod 'AliyunOSSiOS'

pod가 아니라면 이 링크를 클릭하여 다운로드할 수 있습니다.https://help.aliyun.com/document_detail/32173.html우리는 파일의 업로드와 다운로드를 관리하는 데 사용되는 OSS의 도구 종류를 봉인할 수 있다.OSS 초기화 및 구성 코드:
// 
#define ACCKEY @"Mt5jQPnQQECHqTEST"
#define ACCSECRET @"2QgUjalQoBsdLn2iYFpqW0TEST"
#define ENDPOINT @"http://oss-cn-hangzhou.aliyuncs.com"

#import "BZHttpFileHelper.h"
#import 

@interface BZHttpFileHelper ()

@property(nonatomic,strong) OSSClient * client;

@end

@implementation BZHttpFileHelper
+(instancetype)fileHelperShareInstance{
    static BZHttpFileHelper * fileHelper = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        fileHelper = [[BZHttpFileHelper alloc] init];
        [fileHelper initAliClient];
    });
    return fileHelper;
}

-(void)initAliClient{
    id credential = [[OSSPlainTextAKSKPairCredentialProvider alloc] initWithPlainTextAccessKey:ACCKEY                                                                                                    secretKey:ACCSECRET];

    OSSClientConfiguration * conf = [OSSClientConfiguration new];

    //  
    conf.maxRetryCount = 3;

    //  
    conf.timeoutIntervalForRequest =30;

    //  
    conf.timeoutIntervalForResource =24 * 60 * 60;

    //   :http://oss……
    self.client = [[OSSClient alloc] initWithEndpoint:ENDPOINT credentialProvider:credential];
}

파일을 NSData로 변환하여 업로드할 수 있는 파일 업로드:
-(void)uploadAmr:(NSData *)amrData amrName:(NSString *)amrName callback:(void (^)(BOOL))callback{
    OSSPutObjectRequest * put = [OSSPutObjectRequest new];
    put.bucketName = @"test";
    put.objectKey = amrName;
    put.uploadingData = amrData; //  NSData
    put.uploadProgress = ^(int64_t bytesSent,int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
        NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
    };

    OSSTask * putTask = [self.client putObject:put];

    //  
    [putTask continueWithBlock:^id(OSSTask *task) {
        if (!task.error) {
            NSLog(@"upload object success!");
            if (callback) {
                callback(YES);
            }
        } else {

            NSLog(@"upload object failed, error: %@" , task.error);
            if (callback) {
                callback(NO);
            }
            dispatch_async(dispatch_get_main_queue(), ^{
                UIWindow * window = [[[UIApplication sharedApplication] delegate] window];
                [window makeToast:@" " duration:1.5 position:CSToastPositionCenter];
            });
        }
        return nil;
    }];
}

파일 다운로드:
-(void)downloadFile:(NSString *)filename callback:(void (^)(NSData *, BOOL))callback{
    OSSGetObjectRequest * request = [OSSGetObjectRequest new];
    request.bucketName = @"savemoney";
    request.objectKey = filename;
    OSSTask * getTask = [self.client getObject:request];
    [getTask continueWithBlock:^id(OSSTask *task) {
        if (!task.error) {
            NSLog(@"download object success!");
            OSSGetObjectResult * getResult = task.result;
            if (callback) {
                callback(getResult.downloadedData,YES);
            }
        } else {
            NSLog(@"download object failed, error: %@" ,task.error);
            if (callback) {
                callback(nil,NO);
            }
        }
        return nil;
    }];
}

업로드할 때 파일 이름은 우리가 정의한 것으로 다운로드할 때 이 파일 이름만 가져오면 다운로드할 수 있다.그래서 OSS를 사용한 후에 그림 등 파일을 업로드하는 절차는 우리 클라이언트가 먼저 파일을 OSS에 업로드한 다음에 파일 이름을 인터페이스를 통해 서버에 저장하고 서버에 파일 이름을 저장하며 파일이 필요한 곳에서 서버에서 파일 이름을 주고 OSS에서 찾습니다.아리운 OSS의 개발 문서를 참조할 수도 있습니다.https://help.aliyun.com/document_detail/32055.html?spm=a2c4g.11186623.6.726.oKF88C. 마지막으로 그림의 불러오기를 말씀드리자면, 우리는 자신이 필요로 하는 형식에 따라 그림을 읽을 수 있고, NSURL의 분류를 써서 서로 다른 그림의 경로를 되돌릴 수 있습니다.서버에 파일 이름이 저장되어 있기 때문에 원본 그림 cdn 도메인 이름 + 파일 이름을 읽고 다음 코드로 그림의 전체 경로를 얻을 수 있습니다.
+(NSURL *)photourlWithUrlString:(NSString *)url{
    // 
    return [NSURL URLWithString:[NSString stringWithFormat:@"http://savemcdn.dewtip.com/%@",url]];
}

+(NSURL *)s_photourlWithUrlString:(NSString *)url{
//120*120 
    return [NSURL URLWithString:[NSString stringWithFormat:@"http://savemcdn.dewtip.com/%@?x-oss-process=image/resize,w_120,h_120",url]];
}

+(NSURL *)s_chatPhotourlWithUrlString:(NSString *)url{
//
    return [NSURL URLWithString:[NSString stringWithFormat:@"http://savemcdn.dewtip.com/%@?x-oss-process=image/resize,m_lfit,h_200,w_200",url]];
}

더 많은 사진 스타일과 처리는 공식 문서를 참조할 수 있습니다.https://www.alibabacloud.com/help/zh/doc-detail/48884.htm?spm=a2c63.p38356.b99.427.75926010lb0FXvOSS는 그림 처리에 대한 지원이 확실히 잘 되어 있어서 사용하기에 매우 편리하다.

좋은 웹페이지 즐겨찾기