Skip to content

Commit

Permalink
一、add api 1.putSymlink;2.getSymlink;3.restoreObject;
Browse files Browse the repository at this point in the history
二、add testcase;
三、support setting storageClass for Creating bucket;
  • Loading branch information
duan007a committed Aug 1, 2018
1 parent 53e95c2 commit bb9a3a2
Show file tree
Hide file tree
Showing 23 changed files with 560 additions and 3 deletions.
72 changes: 72 additions & 0 deletions AliyunOSSSDK.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

19 changes: 19 additions & 0 deletions AliyunOSSSDK/OSSClient.h
Expand Up @@ -32,6 +32,9 @@
@class OSSCallBackRequest;
@class OSSImagePersistRequest;
@class OSSGetBucketInfoRequest;
@class OSSPutSymlinkRequest;
@class OSSGetSymlinkRequest;
@class OSSRestoreObjectRequest;

@class OSSTask;
@class OSSExecutor;
Expand Down Expand Up @@ -223,6 +226,22 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (OSSTask *)deleteObject:(OSSDeleteObjectRequest *)request;

- (OSSTask *)putSymlink:(OSSPutSymlinkRequest *)request;

- (OSSTask *)getSymlink:(OSSGetSymlinkRequest *)request;

/**
Restores an archived copy of an object back into Aliyun OSS
@param request A container for the necessary parameters to execute the RestoreObject service method.
@return An instance of `OSSTask`. On successful execution, `task.result` will contain an instance of `OSSRestoreObjectResult`. for more information,please refer to `https://help.aliyun.com/document_detail/52930.html`.
@see OSSRestoreObjectRequest
@see OSSRestoreObjectResult
*/
- (OSSTask *)restoreObject:(OSSRestoreObjectRequest *)request;

@end

@interface OSSClient (MultipartUpload)
Expand Down
67 changes: 67 additions & 0 deletions AliyunOSSSDK/OSSClient.m
Expand Up @@ -23,6 +23,9 @@
#import "OSSGetObjectACLRequest.h"
#import "OSSDeleteMultipleObjectsRequest.h"
#import "OSSGetBucketInfoRequest.h"
#import "OSSPutSymlinkRequest.h"
#import "OSSGetSymlinkRequest.h"
#import "OSSRestoreObjectRequest.h"

static NSString * const oss_partInfos_storage_name = @"oss_partInfos_storage_name";
static NSString * const oss_record_info_suffix_with_crc = @"-crc64";
Expand Down Expand Up @@ -388,11 +391,16 @@ - (OSSTask *)createBucket:(OSSCreateBucketRequest *)request {

requestDelegate.responseParser = [[OSSHttpResponseParser alloc] initForOperationType:OSSOperationTypeCreateBucket];

NSString *bodyString = [NSString stringWithFormat:@"<?xml version='1.0' encoding='UTF-8'?><CreateBucketConfiguration><StorageClass>%@</StorageClass></CreateBucketConfiguration>", request.storageClassAsString];
requestDelegate.uploadingData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
NSString *md5String = [OSSUtil base64Md5ForData:requestDelegate.uploadingData];

OSSAllRequestNeededMessage *neededMsg = [[OSSAllRequestNeededMessage alloc] init];
neededMsg.endpoint = self.endpoint;
neededMsg.httpMethod = OSSHTTPMethodPUT;
neededMsg.bucketName = request.bucketName;
neededMsg.headerParams = headerParams;
neededMsg.contentMd5 = md5String;
requestDelegate.allNeededMessage = neededMsg;

requestDelegate.operType = OSSOperationTypeCreateBucket;
Expand Down Expand Up @@ -771,6 +779,65 @@ - (OSSTask *)copyObject:(OSSCopyObjectRequest *)request {
return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired];
}

- (OSSTask *)putSymlink:(OSSPutSymlinkRequest *)request {
OSSNetworkingRequestDelegate * requestDelegate = request.requestDelegate;

requestDelegate.responseParser = [[OSSHttpResponseParser alloc] initForOperationType:OSSOperationTypePutSymlink];

NSMutableDictionary *headerFields = [NSMutableDictionary dictionary];
[headerFields oss_setObject:[request.targetObjectName oss_urlEncodedString] forKey:OSSHttpHeaderSymlinkTarget];
if (request.objectMeta) {
[headerFields addEntriesFromDictionary:request.objectMeta];
}

OSSAllRequestNeededMessage *neededMsg = [[OSSAllRequestNeededMessage alloc] init];
neededMsg.endpoint = self.endpoint;
neededMsg.httpMethod = OSSHTTPMethodPUT;
neededMsg.bucketName = request.bucketName;
neededMsg.objectKey = request.objectKey;
neededMsg.params = request.requestParams;
neededMsg.headerParams = headerFields;
requestDelegate.allNeededMessage = neededMsg;

requestDelegate.operType = OSSOperationTypePutSymlink;

return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired];
}

- (OSSTask *)getSymlink:(OSSGetSymlinkRequest *)request {
OSSNetworkingRequestDelegate * requestDelegate = request.requestDelegate;
requestDelegate.responseParser = [[OSSHttpResponseParser alloc] initForOperationType:OSSOperationTypeGetSymlink];

OSSAllRequestNeededMessage *neededMsg = [[OSSAllRequestNeededMessage alloc] init];
neededMsg.endpoint = self.endpoint;
neededMsg.httpMethod = OSSHTTPMethodGET;
neededMsg.bucketName = request.bucketName;
neededMsg.objectKey = request.objectKey;
neededMsg.params = request.requestParams;
requestDelegate.allNeededMessage = neededMsg;

requestDelegate.operType = OSSOperationTypeGetSymlink;

return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired];
}

- (OSSTask *)restoreObject:(OSSRestoreObjectRequest *)request {
OSSNetworkingRequestDelegate * requestDelegate = request.requestDelegate;
requestDelegate.responseParser = [[OSSHttpResponseParser alloc] initForOperationType:OSSOperationTypeRestoreObject];

OSSAllRequestNeededMessage *neededMsg = [[OSSAllRequestNeededMessage alloc] init];
neededMsg.endpoint = self.endpoint;
neededMsg.httpMethod = OSSHTTPMethodPOST;
neededMsg.bucketName = request.bucketName;
neededMsg.objectKey = request.objectKey;
neededMsg.params = request.requestParams;
requestDelegate.allNeededMessage = neededMsg;

requestDelegate.operType = OSSOperationTypeRestoreObject;

return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired];
}

@end

@implementation OSSClient (MultipartUpload)
Expand Down
12 changes: 11 additions & 1 deletion AliyunOSSSDK/OSSConstants.h
Expand Up @@ -65,7 +65,10 @@ typedef NS_ENUM(NSInteger, OSSOperationType) {
OSSOperationTypeListMultipart,
OSSOperationTypeListMultipartUploads,
OSSOperationTypeTriggerCallBack,
OSSOperationTypeImagePersist
OSSOperationTypeImagePersist,
OSSOperationTypeRestoreObject,
OSSOperationTypePutSymlink,
OSSOperationTypeGetSymlink,
};

/**
Expand Down Expand Up @@ -101,6 +104,13 @@ typedef NS_ENUM(NSInteger, OSSXMLDictionaryNodeNameMode)
OSSXMLDictionaryNodeNameModeNever
};

typedef NS_ENUM(NSInteger, OSSBucketStorageClass)
{
OSSBucketStorageClassStandard,
OSSBucketStorageClassIA,
OSSBucketStorageClassArchive
};

typedef NSString * OSSXMLDictionaryAttributeName NS_EXTENSIBLE_STRING_ENUM;

OBJC_EXTERN OSSXMLDictionaryAttributeName const OSSXMLDictionaryAttributesKey;
Expand Down
1 change: 1 addition & 0 deletions AliyunOSSSDK/OSSDefine.h
Expand Up @@ -72,6 +72,7 @@
#define OSSHttpHeaderBucketACL @"x-oss-acl"
#define OSSHttpHeaderObjectACL @"x-oss-object-acl"
#define OSSHttpHeaderCopySource @"x-oss-copy-source"
#define OSSHttpHeaderSymlinkTarget @"x-oss-symlink-target"

#define OSSHttpQueryProcess @"x-oss-process"

Expand Down
17 changes: 17 additions & 0 deletions AliyunOSSSDK/OSSGetSymlinkRequest.h
@@ -0,0 +1,17 @@
//
// OSSGetSymlinkRequest.h
// AliyunOSSSDK
//
// Created by huaixu on 2018/8/1.
// Copyright © 2018年 aliyun. All rights reserved.
//

#import "OSSRequest.h"

@interface OSSGetSymlinkRequest : OSSRequest

@property (nonatomic, copy) NSString *bucketName;

@property (nonatomic, copy) NSString *objectKey;

@end
17 changes: 17 additions & 0 deletions AliyunOSSSDK/OSSGetSymlinkRequest.m
@@ -0,0 +1,17 @@
//
// OSSGetSymlinkRequest.m
// AliyunOSSSDK
//
// Created by huaixu on 2018/8/1.
// Copyright © 2018年 aliyun. All rights reserved.
//

#import "OSSGetSymlinkRequest.h"

@implementation OSSGetSymlinkRequest

- (NSDictionary *)requestParams {
return @{@"symlink": @""};
}

@end
13 changes: 13 additions & 0 deletions AliyunOSSSDK/OSSGetSymlinkResult.h
@@ -0,0 +1,13 @@
//
// OSSGetSymlinkResult.h
// AliyunOSSSDK
//
// Created by huaixu on 2018/8/1.
// Copyright © 2018年 aliyun. All rights reserved.
//

#import "OSSResult.h"

@interface OSSGetSymlinkResult : OSSResult

@end
13 changes: 13 additions & 0 deletions AliyunOSSSDK/OSSGetSymlinkResult.m
@@ -0,0 +1,13 @@
//
// OSSGetSymlinkResult.m
// AliyunOSSSDK
//
// Created by huaixu on 2018/8/1.
// Copyright © 2018年 aliyun. All rights reserved.
//

#import "OSSGetSymlinkResult.h"

@implementation OSSGetSymlinkResult

@end
24 changes: 24 additions & 0 deletions AliyunOSSSDK/OSSHttpResponseParser.m
Expand Up @@ -17,6 +17,9 @@
#import "OSSGetObjectACLResult.h"
#import "OSSDeleteMultipleObjectsResult.h"
#import "OSSGetBucketInfoResult.h"
#import "OSSRestoreObjectResult.h"
#import "OSSPutSymlinkResult.h"
#import "OSSGetSymlinkResult.h"


@implementation OSSHttpResponseParser {
Expand Down Expand Up @@ -620,6 +623,27 @@ - (nullable id)constructResultObject
}
return bucketInfoResult;
}
case OSSOperationTypeRestoreObject: {
OSSRestoreObjectResult * restoreObjectResult = [OSSRestoreObjectResult new];
if (_response) {
[self parseResponseHeader:_response toResultObject:restoreObjectResult];
}
return restoreObjectResult;
}
case OSSOperationTypePutSymlink: {
OSSPutSymlinkResult * putSymlinkResult = [OSSPutSymlinkResult new];
if (_response) {
[self parseResponseHeader:_response toResultObject:putSymlinkResult];
}
return putSymlinkResult;
}
case OSSOperationTypeGetSymlink: {
OSSGetSymlinkResult * getSymlinkResult = [OSSGetSymlinkResult new];
if (_response) {
[self parseResponseHeader:_response toResultObject:getSymlinkResult];
}
return getSymlinkResult;
}
default: {
OSSLogError(@"unknown operation type");
break;
Expand Down
5 changes: 5 additions & 0 deletions AliyunOSSSDK/OSSModel.h
Expand Up @@ -336,6 +336,11 @@ Sets the session Id for background file transmission
*/
@property (nonatomic, copy) NSString * xOssACL;

@property (nonatomic, assign) OSSBucketStorageClass storageClass;


- (NSString *)storageClassAsString;

@end

/**
Expand Down
31 changes: 30 additions & 1 deletion AliyunOSSSDK/OSSModel.m
Expand Up @@ -335,7 +335,7 @@ - (OSSTask *)interceptRequestMessage:(OSSAllRequestNeededMessage *)requestMessag
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
OSSSubResourceARRAY = @[@"acl", @"uploadId", @"partNumber", @"uploads", @"logging", @"website", @"location",
@"lifecycle", @"referer", @"cors", @"delete", @"append", @"position", @"security-token", @"x-oss-process", @"sequential",@"bucketInfo"];
@"lifecycle", @"referer", @"cors", @"delete", @"append", @"position", @"security-token", @"x-oss-process", @"sequential",@"bucketInfo",@"symlink", @"restore"];
});
/****************************************************************/

Expand Down Expand Up @@ -550,6 +550,35 @@ @implementation OSSGetServiceResult
@end

@implementation OSSCreateBucketRequest

- (instancetype)init
{
self = [super init];
if (self) {
_storageClass = OSSBucketStorageClassStandard;
}
return self;
}

- (NSString *)storageClassAsString {
NSString *storageClassString = nil;
switch (_storageClass) {
case OSSBucketStorageClassStandard:
storageClassString = @"Standard";
break;
case OSSBucketStorageClassIA:
storageClassString = @"IA";
break;
case OSSBucketStorageClassArchive:
storageClassString = @"Archive";
break;
default:
storageClassString = @"Unknown";
break;
}
return storageClassString;
}

@end

@implementation OSSCreateBucketResult
Expand Down
25 changes: 25 additions & 0 deletions AliyunOSSSDK/OSSPutSymlinkRequest.h
@@ -0,0 +1,25 @@
//
// OSSPutSymlinkRequest.h
// AliyunOSSSDK
//
// Created by huaixu on 2018/8/1.
// Copyright © 2018年 aliyun. All rights reserved.
//

#import "OSSRequest.h"

@interface OSSPutSymlinkRequest : OSSRequest

/* bucket name */
@property (nonatomic, copy) NSString *bucketName;

/* object name */
@property (nonatomic, copy) NSString *objectKey;

/* target object name */
@property (nonatomic, copy) NSString *targetObjectName;

/* meta info in request header fields */
@property (nonatomic, copy) NSDictionary *objectMeta;

@end
17 changes: 17 additions & 0 deletions AliyunOSSSDK/OSSPutSymlinkRequest.m
@@ -0,0 +1,17 @@
//
// OSSPutSymlinkRequest.m
// AliyunOSSSDK
//
// Created by huaixu on 2018/8/1.
// Copyright © 2018年 aliyun. All rights reserved.
//

#import "OSSPutSymlinkRequest.h"

@implementation OSSPutSymlinkRequest

- (NSDictionary *)requestParams {
return @{@"symlink": @""};
}

@end
13 changes: 13 additions & 0 deletions AliyunOSSSDK/OSSPutSymlinkResult.h
@@ -0,0 +1,13 @@
//
// OSSPutSymlinkResult.h
// AliyunOSSSDK
//
// Created by huaixu on 2018/8/1.
// Copyright © 2018年 aliyun. All rights reserved.
//

#import "OSSResult.h"

@interface OSSPutSymlinkResult : OSSResult

@end
13 changes: 13 additions & 0 deletions AliyunOSSSDK/OSSPutSymlinkResult.m
@@ -0,0 +1,13 @@
//
// OSSPutSymlinkResult.m
// AliyunOSSSDK
//
// Created by huaixu on 2018/8/1.
// Copyright © 2018年 aliyun. All rights reserved.
//

#import "OSSPutSymlinkResult.h"

@implementation OSSPutSymlinkResult

@end

0 comments on commit bb9a3a2

Please sign in to comment.