From bb9a3a26d382ebe793c6a819c32084a5664ebb1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=A6=E7=94=9F?= Date: Wed, 1 Aug 2018 20:09:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E3=80=81add=20api=201.putSymlink;2.ge?= =?UTF-8?q?tSymlink;3.restoreObject;=20=E4=BA=8C=E3=80=81add=20testcase;?= =?UTF-8?q?=20=E4=B8=89=E3=80=81support=20setting=20storageClass=20for=20C?= =?UTF-8?q?reating=20bucket;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AliyunOSSSDK.xcodeproj/project.pbxproj | 72 +++++++++++++ AliyunOSSSDK/OSSClient.h | 19 ++++ AliyunOSSSDK/OSSClient.m | 67 ++++++++++++ AliyunOSSSDK/OSSConstants.h | 12 ++- AliyunOSSSDK/OSSDefine.h | 1 + AliyunOSSSDK/OSSGetSymlinkRequest.h | 17 ++++ AliyunOSSSDK/OSSGetSymlinkRequest.m | 17 ++++ AliyunOSSSDK/OSSGetSymlinkResult.h | 13 +++ AliyunOSSSDK/OSSGetSymlinkResult.m | 13 +++ AliyunOSSSDK/OSSHttpResponseParser.m | 24 +++++ AliyunOSSSDK/OSSModel.h | 5 + AliyunOSSSDK/OSSModel.m | 31 +++++- AliyunOSSSDK/OSSPutSymlinkRequest.h | 25 +++++ AliyunOSSSDK/OSSPutSymlinkRequest.m | 17 ++++ AliyunOSSSDK/OSSPutSymlinkResult.h | 13 +++ AliyunOSSSDK/OSSPutSymlinkResult.m | 13 +++ AliyunOSSSDK/OSSRestoreObjectRequest.h | 17 ++++ AliyunOSSSDK/OSSRestoreObjectRequest.m | 17 ++++ AliyunOSSSDK/OSSRestoreObjectResult.h | 13 +++ AliyunOSSSDK/OSSRestoreObjectResult.m | 13 +++ AliyunOSSSDK/OSSService.h | 6 ++ AliyunOSSSDK/OSSUtil.m | 2 +- AliyunOSSiOSTests/OSSObjectTests.m | 136 +++++++++++++++++++++++++ 23 files changed, 560 insertions(+), 3 deletions(-) create mode 100644 AliyunOSSSDK/OSSGetSymlinkRequest.h create mode 100644 AliyunOSSSDK/OSSGetSymlinkRequest.m create mode 100644 AliyunOSSSDK/OSSGetSymlinkResult.h create mode 100644 AliyunOSSSDK/OSSGetSymlinkResult.m create mode 100644 AliyunOSSSDK/OSSPutSymlinkRequest.h create mode 100644 AliyunOSSSDK/OSSPutSymlinkRequest.m create mode 100644 AliyunOSSSDK/OSSPutSymlinkResult.h create mode 100644 AliyunOSSSDK/OSSPutSymlinkResult.m create mode 100644 AliyunOSSSDK/OSSRestoreObjectRequest.h create mode 100644 AliyunOSSSDK/OSSRestoreObjectRequest.m create mode 100644 AliyunOSSSDK/OSSRestoreObjectResult.h create mode 100644 AliyunOSSSDK/OSSRestoreObjectResult.m diff --git a/AliyunOSSSDK.xcodeproj/project.pbxproj b/AliyunOSSSDK.xcodeproj/project.pbxproj index a6632c8e..4ffccc9d 100644 --- a/AliyunOSSSDK.xcodeproj/project.pbxproj +++ b/AliyunOSSSDK.xcodeproj/project.pbxproj @@ -64,6 +64,30 @@ D827B41221114E4B003A24F6 /* NSMutableDictionary+OSS.h in Headers */ = {isa = PBXBuildFile; fileRef = D827B40F21114E4B003A24F6 /* NSMutableDictionary+OSS.h */; settings = {ATTRIBUTES = (Public, ); }; }; D827B41321114E4B003A24F6 /* NSMutableDictionary+OSS.m in Sources */ = {isa = PBXBuildFile; fileRef = D827B41021114E4B003A24F6 /* NSMutableDictionary+OSS.m */; }; D827B41421114E4B003A24F6 /* NSMutableDictionary+OSS.m in Sources */ = {isa = PBXBuildFile; fileRef = D827B41021114E4B003A24F6 /* NSMutableDictionary+OSS.m */; }; + D827B4172111A6E4003A24F6 /* OSSPutSymlinkRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D827B4152111A6E4003A24F6 /* OSSPutSymlinkRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D827B4182111A6E4003A24F6 /* OSSPutSymlinkRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D827B4152111A6E4003A24F6 /* OSSPutSymlinkRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D827B4192111A6E4003A24F6 /* OSSPutSymlinkRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D827B4162111A6E4003A24F6 /* OSSPutSymlinkRequest.m */; }; + D827B41A2111A6E4003A24F6 /* OSSPutSymlinkRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D827B4162111A6E4003A24F6 /* OSSPutSymlinkRequest.m */; }; + D827B41D2111A6FA003A24F6 /* OSSGetSymlinkRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D827B41B2111A6FA003A24F6 /* OSSGetSymlinkRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D827B41E2111A6FA003A24F6 /* OSSGetSymlinkRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D827B41B2111A6FA003A24F6 /* OSSGetSymlinkRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D827B41F2111A6FA003A24F6 /* OSSGetSymlinkRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D827B41C2111A6FA003A24F6 /* OSSGetSymlinkRequest.m */; }; + D827B4202111A6FA003A24F6 /* OSSGetSymlinkRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D827B41C2111A6FA003A24F6 /* OSSGetSymlinkRequest.m */; }; + D827B4232111A71B003A24F6 /* OSSRestoreObjectRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D827B4212111A71B003A24F6 /* OSSRestoreObjectRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D827B4242111A71B003A24F6 /* OSSRestoreObjectRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D827B4212111A71B003A24F6 /* OSSRestoreObjectRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D827B4252111A71B003A24F6 /* OSSRestoreObjectRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D827B4222111A71B003A24F6 /* OSSRestoreObjectRequest.m */; }; + D827B4262111A71B003A24F6 /* OSSRestoreObjectRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D827B4222111A71B003A24F6 /* OSSRestoreObjectRequest.m */; }; + D827B4292111A853003A24F6 /* OSSRestoreObjectResult.h in Headers */ = {isa = PBXBuildFile; fileRef = D827B4272111A853003A24F6 /* OSSRestoreObjectResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D827B42A2111A853003A24F6 /* OSSRestoreObjectResult.h in Headers */ = {isa = PBXBuildFile; fileRef = D827B4272111A853003A24F6 /* OSSRestoreObjectResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D827B42B2111A853003A24F6 /* OSSRestoreObjectResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D827B4282111A853003A24F6 /* OSSRestoreObjectResult.m */; }; + D827B42C2111A853003A24F6 /* OSSRestoreObjectResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D827B4282111A853003A24F6 /* OSSRestoreObjectResult.m */; }; + D827B42F2111ADE9003A24F6 /* OSSPutSymlinkResult.h in Headers */ = {isa = PBXBuildFile; fileRef = D827B42D2111ADE9003A24F6 /* OSSPutSymlinkResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D827B4302111ADE9003A24F6 /* OSSPutSymlinkResult.h in Headers */ = {isa = PBXBuildFile; fileRef = D827B42D2111ADE9003A24F6 /* OSSPutSymlinkResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D827B4312111ADE9003A24F6 /* OSSPutSymlinkResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D827B42E2111ADE9003A24F6 /* OSSPutSymlinkResult.m */; }; + D827B4322111ADE9003A24F6 /* OSSPutSymlinkResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D827B42E2111ADE9003A24F6 /* OSSPutSymlinkResult.m */; }; + D827B4352111ADF7003A24F6 /* OSSGetSymlinkResult.h in Headers */ = {isa = PBXBuildFile; fileRef = D827B4332111ADF7003A24F6 /* OSSGetSymlinkResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D827B4362111ADF7003A24F6 /* OSSGetSymlinkResult.h in Headers */ = {isa = PBXBuildFile; fileRef = D827B4332111ADF7003A24F6 /* OSSGetSymlinkResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D827B4372111ADF7003A24F6 /* OSSGetSymlinkResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D827B4342111ADF7003A24F6 /* OSSGetSymlinkResult.m */; }; + D827B4382111ADF7003A24F6 /* OSSGetSymlinkResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D827B4342111ADF7003A24F6 /* OSSGetSymlinkResult.m */; }; D829F3A91FD8CFBE00A8C2DC /* OSSInputStreamHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = D829F3A71FD8CFBE00A8C2DC /* OSSInputStreamHelper.h */; }; D829F3AA1FD8CFBE00A8C2DC /* OSSInputStreamHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = D829F3A71FD8CFBE00A8C2DC /* OSSInputStreamHelper.h */; }; D829F3AB1FD8CFBE00A8C2DC /* OSSInputStreamHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = D829F3A81FD8CFBE00A8C2DC /* OSSInputStreamHelper.m */; }; @@ -221,6 +245,18 @@ D827B40A21107169003A24F6 /* NSDate+OSS.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSDate+OSS.m"; sourceTree = ""; }; D827B40F21114E4B003A24F6 /* NSMutableDictionary+OSS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSMutableDictionary+OSS.h"; sourceTree = ""; }; D827B41021114E4B003A24F6 /* NSMutableDictionary+OSS.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSMutableDictionary+OSS.m"; sourceTree = ""; }; + D827B4152111A6E4003A24F6 /* OSSPutSymlinkRequest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSSPutSymlinkRequest.h; sourceTree = ""; }; + D827B4162111A6E4003A24F6 /* OSSPutSymlinkRequest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSSPutSymlinkRequest.m; sourceTree = ""; }; + D827B41B2111A6FA003A24F6 /* OSSGetSymlinkRequest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSSGetSymlinkRequest.h; sourceTree = ""; }; + D827B41C2111A6FA003A24F6 /* OSSGetSymlinkRequest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSSGetSymlinkRequest.m; sourceTree = ""; }; + D827B4212111A71B003A24F6 /* OSSRestoreObjectRequest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSSRestoreObjectRequest.h; sourceTree = ""; }; + D827B4222111A71B003A24F6 /* OSSRestoreObjectRequest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSSRestoreObjectRequest.m; sourceTree = ""; }; + D827B4272111A853003A24F6 /* OSSRestoreObjectResult.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSSRestoreObjectResult.h; sourceTree = ""; }; + D827B4282111A853003A24F6 /* OSSRestoreObjectResult.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSSRestoreObjectResult.m; sourceTree = ""; }; + D827B42D2111ADE9003A24F6 /* OSSPutSymlinkResult.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSSPutSymlinkResult.h; sourceTree = ""; }; + D827B42E2111ADE9003A24F6 /* OSSPutSymlinkResult.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSSPutSymlinkResult.m; sourceTree = ""; }; + D827B4332111ADF7003A24F6 /* OSSGetSymlinkResult.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSSGetSymlinkResult.h; sourceTree = ""; }; + D827B4342111ADF7003A24F6 /* OSSGetSymlinkResult.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSSGetSymlinkResult.m; sourceTree = ""; }; D829F3A71FD8CFBE00A8C2DC /* OSSInputStreamHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSSInputStreamHelper.h; sourceTree = ""; }; D829F3A81FD8CFBE00A8C2DC /* OSSInputStreamHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSSInputStreamHelper.m; sourceTree = ""; }; D842D5891FFC8C0500220913 /* OSSLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSSLog.swift; sourceTree = ""; }; @@ -438,6 +474,18 @@ D827B40A21107169003A24F6 /* NSDate+OSS.m */, D827B40F21114E4B003A24F6 /* NSMutableDictionary+OSS.h */, D827B41021114E4B003A24F6 /* NSMutableDictionary+OSS.m */, + D827B4152111A6E4003A24F6 /* OSSPutSymlinkRequest.h */, + D827B4162111A6E4003A24F6 /* OSSPutSymlinkRequest.m */, + D827B41B2111A6FA003A24F6 /* OSSGetSymlinkRequest.h */, + D827B41C2111A6FA003A24F6 /* OSSGetSymlinkRequest.m */, + D827B4212111A71B003A24F6 /* OSSRestoreObjectRequest.h */, + D827B4222111A71B003A24F6 /* OSSRestoreObjectRequest.m */, + D827B4272111A853003A24F6 /* OSSRestoreObjectResult.h */, + D827B4282111A853003A24F6 /* OSSRestoreObjectResult.m */, + D827B42D2111ADE9003A24F6 /* OSSPutSymlinkResult.h */, + D827B42E2111ADE9003A24F6 /* OSSPutSymlinkResult.m */, + D827B4332111ADF7003A24F6 /* OSSGetSymlinkResult.h */, + D827B4342111ADF7003A24F6 /* OSSGetSymlinkResult.m */, ); path = AliyunOSSSDK; sourceTree = ""; @@ -535,6 +583,12 @@ D80C88ED201B06E200F379D8 /* OSSDeleteMultipleObjectsResult.h in Headers */, D80C88E7201B06CF00F379D8 /* OSSDeleteMultipleObjectsRequest.h in Headers */, D80C88D5201AC33000F379D8 /* OSSGetObjectACLResult.h in Headers */, + D827B4292111A853003A24F6 /* OSSRestoreObjectResult.h in Headers */, + D827B4172111A6E4003A24F6 /* OSSPutSymlinkRequest.h in Headers */, + D827B42F2111ADE9003A24F6 /* OSSPutSymlinkResult.h in Headers */, + D827B4232111A71B003A24F6 /* OSSRestoreObjectRequest.h in Headers */, + D827B41D2111A6FA003A24F6 /* OSSGetSymlinkRequest.h in Headers */, + D827B4352111ADF7003A24F6 /* OSSGetSymlinkResult.h in Headers */, D8C2951220F46A79008A08AA /* OSSGetBucketInfoRequest.h in Headers */, D8C2951820F46A95008A08AA /* OSSGetBucketInfoResult.h in Headers */, D827B40B21107169003A24F6 /* NSDate+OSS.h in Headers */, @@ -586,6 +640,12 @@ D80C88CA201AC1B400F379D8 /* OSSGetObjectACLRequest.h in Headers */, D80C88D6201AC33000F379D8 /* OSSGetObjectACLResult.h in Headers */, D80C88EE201B06E200F379D8 /* OSSDeleteMultipleObjectsResult.h in Headers */, + D827B42A2111A853003A24F6 /* OSSRestoreObjectResult.h in Headers */, + D827B4182111A6E4003A24F6 /* OSSPutSymlinkRequest.h in Headers */, + D827B4302111ADE9003A24F6 /* OSSPutSymlinkResult.h in Headers */, + D827B4242111A71B003A24F6 /* OSSRestoreObjectRequest.h in Headers */, + D827B41E2111A6FA003A24F6 /* OSSGetSymlinkRequest.h in Headers */, + D827B4362111ADF7003A24F6 /* OSSGetSymlinkResult.h in Headers */, D8C2951320F46A79008A08AA /* OSSGetBucketInfoRequest.h in Headers */, D8C2951920F46A95008A08AA /* OSSGetBucketInfoResult.h in Headers */, D80C88E8201B06CF00F379D8 /* OSSDeleteMultipleObjectsRequest.h in Headers */, @@ -743,23 +803,27 @@ D85277F32015BD5A00D7B1DE /* OSSNetworkingRequestDelegate.m in Sources */, D8C5E5431FCE915000613BA5 /* aos_crc64.c in Sources */, D8C41AE61FCC2F920091699B /* OSSNetworking.m in Sources */, + D827B4372111ADF7003A24F6 /* OSSGetSymlinkResult.m in Sources */, D80C88E9201B06CF00F379D8 /* OSSDeleteMultipleObjectsRequest.m in Sources */, D8C41AE71FCC2F920091699B /* OSSHttpdns.m in Sources */, D8C41AE91FCC2F920091699B /* OSSClient.m in Sources */, D80C88D7201AC33000F379D8 /* OSSGetObjectACLResult.m in Sources */, D827B40D21107169003A24F6 /* NSDate+OSS.m in Sources */, D8C41AEC1FCC2F920091699B /* OSSLog.m in Sources */, + D827B4252111A71B003A24F6 /* OSSRestoreObjectRequest.m in Sources */, D8C41AF01FCC2F920091699B /* OSSModel.m in Sources */, D8C41AF51FCC2F920091699B /* OSSIPv6PrefixResolver.m in Sources */, D85278062015D58400D7B1DE /* OSSHttpResponseParser.m in Sources */, D8C41AF61FCC2F920091699B /* OSSReachabilityManager.m in Sources */, D80C88EF201B06E200F379D8 /* OSSDeleteMultipleObjectsResult.m in Sources */, D8C41AF71FCC2F920091699B /* OSSIPv6Adapter.m in Sources */, + D827B4192111A6E4003A24F6 /* OSSPutSymlinkRequest.m in Sources */, D8C41AFA1FCC2F920091699B /* OSSCompat.m in Sources */, D8C41AFC1FCC2F920091699B /* OSSCancellationTokenRegistration.m in Sources */, D8C41AFD1FCC2F920091699B /* OSSBolts.m in Sources */, D8C41AFF1FCC2F920091699B /* OSSTaskCompletionSource.m in Sources */, D8C2951420F46A79008A08AA /* OSSGetBucketInfoRequest.m in Sources */, + D827B42B2111A853003A24F6 /* OSSRestoreObjectResult.m in Sources */, D8C41B001FCC2F920091699B /* OSSTask.m in Sources */, D8C41B011FCC2F920091699B /* OSSCancellationToken.m in Sources */, D8C41B071FCC2F920091699B /* OSSCancellationTokenSource.m in Sources */, @@ -767,8 +831,10 @@ D8C5E54F1FCEB57600613BA5 /* NSMutableData+OSS_CRC.m in Sources */, D80C88D1201AC21200F379D8 /* OSSResult.m in Sources */, D8C41B0A1FCC2F920091699B /* OSSXMLDictionary.m in Sources */, + D827B41F2111A6FA003A24F6 /* OSSGetSymlinkRequest.m in Sources */, D852780C2015D59000D7B1DE /* OSSURLRequestRetryHandler.m in Sources */, D85277ED2015BBAD00D7B1DE /* OSSRequest.m in Sources */, + D827B4312111ADE9003A24F6 /* OSSPutSymlinkResult.m in Sources */, D827B41321114E4B003A24F6 /* NSMutableDictionary+OSS.m in Sources */, D85278122015DF4900D7B1DE /* OSSConstants.m in Sources */, D80C88CB201AC1B400F379D8 /* OSSGetObjectACLRequest.m in Sources */, @@ -790,23 +856,27 @@ D85277F42015BD5A00D7B1DE /* OSSNetworkingRequestDelegate.m in Sources */, D8C5E5441FCE915000613BA5 /* aos_crc64.c in Sources */, D8C41AA71FCC284F0091699B /* OSSNetworking.m in Sources */, + D827B4382111ADF7003A24F6 /* OSSGetSymlinkResult.m in Sources */, D80C88EA201B06CF00F379D8 /* OSSDeleteMultipleObjectsRequest.m in Sources */, D8C41AA81FCC284F0091699B /* OSSHttpdns.m in Sources */, D8C41AAA1FCC284F0091699B /* OSSClient.m in Sources */, D80C88D8201AC33000F379D8 /* OSSGetObjectACLResult.m in Sources */, D827B40E21107169003A24F6 /* NSDate+OSS.m in Sources */, D8C41AAD1FCC284F0091699B /* OSSLog.m in Sources */, + D827B4262111A71B003A24F6 /* OSSRestoreObjectRequest.m in Sources */, D8C41AB11FCC284F0091699B /* OSSModel.m in Sources */, D8C41AB61FCC284F0091699B /* OSSIPv6PrefixResolver.m in Sources */, D85278072015D58400D7B1DE /* OSSHttpResponseParser.m in Sources */, D8C41AB71FCC284F0091699B /* OSSReachabilityManager.m in Sources */, D80C88F0201B06E200F379D8 /* OSSDeleteMultipleObjectsResult.m in Sources */, D8C41AB81FCC284F0091699B /* OSSIPv6Adapter.m in Sources */, + D827B41A2111A6E4003A24F6 /* OSSPutSymlinkRequest.m in Sources */, D8C41ABB1FCC284F0091699B /* OSSCompat.m in Sources */, D8C41ABD1FCC284F0091699B /* OSSCancellationTokenRegistration.m in Sources */, D8C41ABE1FCC284F0091699B /* OSSBolts.m in Sources */, D8C41AC01FCC284F0091699B /* OSSTaskCompletionSource.m in Sources */, D8C2951520F46A79008A08AA /* OSSGetBucketInfoRequest.m in Sources */, + D827B42C2111A853003A24F6 /* OSSRestoreObjectResult.m in Sources */, D8C41AC11FCC284F0091699B /* OSSTask.m in Sources */, D8C41AC21FCC284F0091699B /* OSSCancellationToken.m in Sources */, D8C41AC81FCC28500091699B /* OSSCancellationTokenSource.m in Sources */, @@ -814,8 +884,10 @@ D8C5E5501FCEB57600613BA5 /* NSMutableData+OSS_CRC.m in Sources */, D80C88D2201AC21200F379D8 /* OSSResult.m in Sources */, D8C41ACB1FCC28500091699B /* OSSXMLDictionary.m in Sources */, + D827B4202111A6FA003A24F6 /* OSSGetSymlinkRequest.m in Sources */, D852780D2015D59000D7B1DE /* OSSURLRequestRetryHandler.m in Sources */, D85277EE2015BBAD00D7B1DE /* OSSRequest.m in Sources */, + D827B4322111ADE9003A24F6 /* OSSPutSymlinkResult.m in Sources */, D827B41421114E4B003A24F6 /* NSMutableDictionary+OSS.m in Sources */, D85278132015DF4900D7B1DE /* OSSConstants.m in Sources */, D80C88CC201AC1B400F379D8 /* OSSGetObjectACLRequest.m in Sources */, diff --git a/AliyunOSSSDK/OSSClient.h b/AliyunOSSSDK/OSSClient.h index 52d2c744..16758891 100644 --- a/AliyunOSSSDK/OSSClient.h +++ b/AliyunOSSSDK/OSSClient.h @@ -32,6 +32,9 @@ @class OSSCallBackRequest; @class OSSImagePersistRequest; @class OSSGetBucketInfoRequest; +@class OSSPutSymlinkRequest; +@class OSSGetSymlinkRequest; +@class OSSRestoreObjectRequest; @class OSSTask; @class OSSExecutor; @@ -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) diff --git a/AliyunOSSSDK/OSSClient.m b/AliyunOSSSDK/OSSClient.m index 154d3544..4404e536 100644 --- a/AliyunOSSSDK/OSSClient.m +++ b/AliyunOSSSDK/OSSClient.m @@ -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"; @@ -388,11 +391,16 @@ - (OSSTask *)createBucket:(OSSCreateBucketRequest *)request { requestDelegate.responseParser = [[OSSHttpResponseParser alloc] initForOperationType:OSSOperationTypeCreateBucket]; + NSString *bodyString = [NSString stringWithFormat:@"%@", 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; @@ -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) diff --git a/AliyunOSSSDK/OSSConstants.h b/AliyunOSSSDK/OSSConstants.h index 45bf4e58..aa044c7b 100644 --- a/AliyunOSSSDK/OSSConstants.h +++ b/AliyunOSSSDK/OSSConstants.h @@ -65,7 +65,10 @@ typedef NS_ENUM(NSInteger, OSSOperationType) { OSSOperationTypeListMultipart, OSSOperationTypeListMultipartUploads, OSSOperationTypeTriggerCallBack, - OSSOperationTypeImagePersist + OSSOperationTypeImagePersist, + OSSOperationTypeRestoreObject, + OSSOperationTypePutSymlink, + OSSOperationTypeGetSymlink, }; /** @@ -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; diff --git a/AliyunOSSSDK/OSSDefine.h b/AliyunOSSSDK/OSSDefine.h index 8f1fc9ec..f7dbc9c4 100644 --- a/AliyunOSSSDK/OSSDefine.h +++ b/AliyunOSSSDK/OSSDefine.h @@ -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" diff --git a/AliyunOSSSDK/OSSGetSymlinkRequest.h b/AliyunOSSSDK/OSSGetSymlinkRequest.h new file mode 100644 index 00000000..bbe952cd --- /dev/null +++ b/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 diff --git a/AliyunOSSSDK/OSSGetSymlinkRequest.m b/AliyunOSSSDK/OSSGetSymlinkRequest.m new file mode 100644 index 00000000..b53a2b2b --- /dev/null +++ b/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 diff --git a/AliyunOSSSDK/OSSGetSymlinkResult.h b/AliyunOSSSDK/OSSGetSymlinkResult.h new file mode 100644 index 00000000..64fe7864 --- /dev/null +++ b/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 diff --git a/AliyunOSSSDK/OSSGetSymlinkResult.m b/AliyunOSSSDK/OSSGetSymlinkResult.m new file mode 100644 index 00000000..1206ec25 --- /dev/null +++ b/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 diff --git a/AliyunOSSSDK/OSSHttpResponseParser.m b/AliyunOSSSDK/OSSHttpResponseParser.m index 762f8153..5dc4b6db 100644 --- a/AliyunOSSSDK/OSSHttpResponseParser.m +++ b/AliyunOSSSDK/OSSHttpResponseParser.m @@ -17,6 +17,9 @@ #import "OSSGetObjectACLResult.h" #import "OSSDeleteMultipleObjectsResult.h" #import "OSSGetBucketInfoResult.h" +#import "OSSRestoreObjectResult.h" +#import "OSSPutSymlinkResult.h" +#import "OSSGetSymlinkResult.h" @implementation OSSHttpResponseParser { @@ -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; diff --git a/AliyunOSSSDK/OSSModel.h b/AliyunOSSSDK/OSSModel.h index 41ced4fb..479e3856 100644 --- a/AliyunOSSSDK/OSSModel.h +++ b/AliyunOSSSDK/OSSModel.h @@ -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 /** diff --git a/AliyunOSSSDK/OSSModel.m b/AliyunOSSSDK/OSSModel.m index ef60fd05..a760ac5a 100644 --- a/AliyunOSSSDK/OSSModel.m +++ b/AliyunOSSSDK/OSSModel.m @@ -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"]; }); /****************************************************************/ @@ -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 diff --git a/AliyunOSSSDK/OSSPutSymlinkRequest.h b/AliyunOSSSDK/OSSPutSymlinkRequest.h new file mode 100644 index 00000000..6492677e --- /dev/null +++ b/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 diff --git a/AliyunOSSSDK/OSSPutSymlinkRequest.m b/AliyunOSSSDK/OSSPutSymlinkRequest.m new file mode 100644 index 00000000..d553a92c --- /dev/null +++ b/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 diff --git a/AliyunOSSSDK/OSSPutSymlinkResult.h b/AliyunOSSSDK/OSSPutSymlinkResult.h new file mode 100644 index 00000000..060fc804 --- /dev/null +++ b/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 diff --git a/AliyunOSSSDK/OSSPutSymlinkResult.m b/AliyunOSSSDK/OSSPutSymlinkResult.m new file mode 100644 index 00000000..15dc76a9 --- /dev/null +++ b/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 diff --git a/AliyunOSSSDK/OSSRestoreObjectRequest.h b/AliyunOSSSDK/OSSRestoreObjectRequest.h new file mode 100644 index 00000000..a4fc0654 --- /dev/null +++ b/AliyunOSSSDK/OSSRestoreObjectRequest.h @@ -0,0 +1,17 @@ +// +// OSSRestoreObjectRequest.h +// AliyunOSSSDK +// +// Created by huaixu on 2018/8/1. +// Copyright © 2018年 aliyun. All rights reserved. +// + +#import "OSSRequest.h" + +@interface OSSRestoreObjectRequest : OSSRequest + +@property (nonatomic, copy) NSString *bucketName; + +@property (nonatomic, copy) NSString *objectKey; + +@end diff --git a/AliyunOSSSDK/OSSRestoreObjectRequest.m b/AliyunOSSSDK/OSSRestoreObjectRequest.m new file mode 100644 index 00000000..72d4635e --- /dev/null +++ b/AliyunOSSSDK/OSSRestoreObjectRequest.m @@ -0,0 +1,17 @@ +// +// OSSRestoreObjectRequest.m +// AliyunOSSSDK +// +// Created by huaixu on 2018/8/1. +// Copyright © 2018年 aliyun. All rights reserved. +// + +#import "OSSRestoreObjectRequest.h" + +@implementation OSSRestoreObjectRequest + +- (NSDictionary *)requestParams { + return @{@"restore": @""}; +} + +@end diff --git a/AliyunOSSSDK/OSSRestoreObjectResult.h b/AliyunOSSSDK/OSSRestoreObjectResult.h new file mode 100644 index 00000000..1249081d --- /dev/null +++ b/AliyunOSSSDK/OSSRestoreObjectResult.h @@ -0,0 +1,13 @@ +// +// OSSRestoreObjectResult.h +// AliyunOSSSDK +// +// Created by huaixu on 2018/8/1. +// Copyright © 2018年 aliyun. All rights reserved. +// + +#import "OSSResult.h" + +@interface OSSRestoreObjectResult : OSSResult + +@end diff --git a/AliyunOSSSDK/OSSRestoreObjectResult.m b/AliyunOSSSDK/OSSRestoreObjectResult.m new file mode 100644 index 00000000..c3d35c87 --- /dev/null +++ b/AliyunOSSSDK/OSSRestoreObjectResult.m @@ -0,0 +1,13 @@ +// +// OSSRestoreObjectResult.m +// AliyunOSSSDK +// +// Created by huaixu on 2018/8/1. +// Copyright © 2018年 aliyun. All rights reserved. +// + +#import "OSSRestoreObjectResult.h" + +@implementation OSSRestoreObjectResult + +@end diff --git a/AliyunOSSSDK/OSSService.h b/AliyunOSSSDK/OSSService.h index 716c7ac2..b275e736 100644 --- a/AliyunOSSSDK/OSSService.h +++ b/AliyunOSSSDK/OSSService.h @@ -25,6 +25,12 @@ #import "OSSDeleteMultipleObjectsResult.h" #import "OSSGetBucketInfoRequest.h" #import "OSSGetBucketInfoResult.h" +#import "OSSPutSymlinkRequest.h" +#import "OSSPutSymlinkResult.h" +#import "OSSGetSymlinkRequest.h" +#import "OSSGetSymlinkResult.h" +#import "OSSRestoreObjectRequest.h" +#import "OSSRestoreObjectResult.h" #import "OSSClient.h" #import "OSSModel.h" diff --git a/AliyunOSSSDK/OSSUtil.m b/AliyunOSSSDK/OSSUtil.m index 2fcdda58..b62144ee 100644 --- a/AliyunOSSSDK/OSSUtil.m +++ b/AliyunOSSSDK/OSSUtil.m @@ -301,7 +301,7 @@ + (BOOL)isSubresource:(NSString *)param { @"tagging", @"objectMeta", @"uploadId", @"partNumber", @"security-token", @"position", @"img", @"style", @"styleName", @"replication", @"replicationProgress", @"replicationLocation", @"cname", @"bucketInfo", @"comp", @"qos", @"live", @"status", @"vod", @"startTime", @"endTime", @"symlink", @"x-oss-process", @"response-content-type", - @"response-content-language", @"response-expires", @"response-cache-control", @"response-content-disposition", @"response-content-encoding" + @"response-content-language", @"response-expires", @"response-cache-control", @"response-content-disposition", @"response-content-encoding",@"restore" ]; }); /****************************************************************/ diff --git a/AliyunOSSiOSTests/OSSObjectTests.m b/AliyunOSSiOSTests/OSSObjectTests.m index dea0dfdf..78f50989 100644 --- a/AliyunOSSiOSTests/OSSObjectTests.m +++ b/AliyunOSSiOSTests/OSSObjectTests.m @@ -629,6 +629,142 @@ - (void)testAPI_getObjectOverwriteOldFile [[NSFileManager defaultManager] removeItemAtPath:tmpFilePath error:nil]; } +- (void)testAPI_putSymlink { + NSString *filePath = [[NSString oss_documentDirectory] stringByAppendingPathComponent:_fileNames[2]]; + NSURL * fileURL = [NSURL fileURLWithPath:filePath]; + + OSSPutObjectRequest * putObjectRequest = [OSSPutObjectRequest new]; + putObjectRequest.bucketName = _publicBucketName; + putObjectRequest.objectKey = @"test-symlink-targetObjectName"; + putObjectRequest.uploadingFileURL = fileURL; + putObjectRequest.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"test-symlink-target", @"x-oss-meta-name", nil]; + + OSSTask * task = [_client putObject:putObjectRequest]; + [task waitUntilFinished]; + + OSSPutSymlinkRequest * putSymlinkRequest = [OSSPutSymlinkRequest new]; + putSymlinkRequest.bucketName = _publicBucketName; + putSymlinkRequest.objectKey = @"test-symlink-objectName"; + putSymlinkRequest.targetObjectName = @"test-symlink-targetObjectName"; + putSymlinkRequest.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"HONGKONG", @"x-oss-meta-location", nil]; + + OSSTask * putSymlinktask = [_client putSymlink:putSymlinkRequest]; + + [[putSymlinktask continueWithBlock:^id(OSSTask *task) { + XCTAssertNil(task.error); + + return nil; + }] waitUntilFinished]; + + OSSGetSymlinkRequest * getSymlinkRequest = [OSSGetSymlinkRequest new]; + getSymlinkRequest.bucketName = _publicBucketName; + getSymlinkRequest.objectKey = @"test-symlink-objectName"; + + OSSTask * getSymlinktask = [_client getSymlink:getSymlinkRequest]; + + [[getSymlinktask continueWithBlock:^id(OSSTask *task) { + XCTAssertNil(task.error); + OSSGetSymlinkResult *result = (OSSGetSymlinkResult *)task.result; + NSString *targetObjectName = (NSString *)[result.httpResponseHeaderFields valueForKey:OSSHttpHeaderSymlinkTarget]; + NSString *metaLocation = (NSString *)[result.httpResponseHeaderFields valueForKey:@"x-oss-meta-location"]; + + XCTAssertTrue([targetObjectName isEqualToString:@"test-symlink-targetObjectName"]); + XCTAssertTrue([metaLocation isEqualToString:@"HONGKONG"]); + + return nil; + }] waitUntilFinished]; +} + +- (void)testAPI_getSymlink { + NSString *filePath = [[NSString oss_documentDirectory] stringByAppendingPathComponent:_fileNames[2]]; + NSURL * fileURL = [NSURL fileURLWithPath:filePath]; + + OSSPutObjectRequest * putObjectRequest = [OSSPutObjectRequest new]; + putObjectRequest.bucketName = _publicBucketName; + putObjectRequest.objectKey = @"test-symlink-targetObjectName"; + putObjectRequest.uploadingFileURL = fileURL; + putObjectRequest.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"test-symlink-target", @"x-oss-meta-name", nil]; + + OSSTask * task = [_client putObject:putObjectRequest]; + [task waitUntilFinished]; + + OSSPutSymlinkRequest * putSymlinkRequest = [OSSPutSymlinkRequest new]; + putSymlinkRequest.bucketName = _publicBucketName; + putSymlinkRequest.objectKey = @"test-symlink-objectName"; + putSymlinkRequest.targetObjectName = @"test-symlink-targetObjectName"; + putSymlinkRequest.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"HONGKONG", @"x-oss-meta-location", nil]; + + OSSTask * putSymlinktask = [_client putSymlink:putSymlinkRequest]; + + [[putSymlinktask continueWithBlock:^id(OSSTask *task) { + XCTAssertNil(task.error); + + return nil; + }] waitUntilFinished]; + + OSSGetSymlinkRequest * getSymlinkRequest = [OSSGetSymlinkRequest new]; + getSymlinkRequest.bucketName = _publicBucketName; + getSymlinkRequest.objectKey = @"test-symlink-objectName"; + + OSSTask * getSymlinktask = [_client getSymlink:getSymlinkRequest]; + + [[getSymlinktask continueWithBlock:^id(OSSTask *task) { + XCTAssertNil(task.error); + OSSGetSymlinkResult *result = (OSSGetSymlinkResult *)task.result; + NSString *targetObjectName = (NSString *)[result.httpResponseHeaderFields valueForKey:OSSHttpHeaderSymlinkTarget]; + NSString *metaLocation = (NSString *)[result.httpResponseHeaderFields valueForKey:@"x-oss-meta-location"]; + + XCTAssertTrue([targetObjectName isEqualToString:@"test-symlink-targetObjectName"]); + XCTAssertTrue([metaLocation isEqualToString:@"HONGKONG"]); + + return nil; + }] waitUntilFinished]; +} + +- (void)testAPI_restoreObject { + NSString *bucketName = @"aliyun-oss-ios-restore-object-test"; + NSString *objectName = @"test-restore-objectName"; + + OSSCreateBucketRequest *createBucketRequest = [OSSCreateBucketRequest new]; + createBucketRequest.bucketName = bucketName; + createBucketRequest.storageClass = OSSBucketStorageClassArchive; + [[_client createBucket:createBucketRequest] waitUntilFinished]; + + NSString *filePath = [[NSString oss_documentDirectory] stringByAppendingPathComponent:_fileNames[2]]; + NSURL * fileURL = [NSURL fileURLWithPath:filePath]; + + OSSPutObjectRequest * putObjectRequest = [OSSPutObjectRequest new]; + putObjectRequest.bucketName = bucketName; + putObjectRequest.objectKey = objectName; + putObjectRequest.uploadingFileURL = fileURL; + putObjectRequest.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:objectName, @"x-oss-meta-name", nil]; + + OSSTask * task = [_client putObject:putObjectRequest]; + [task waitUntilFinished]; + + OSSRestoreObjectRequest * restoreObjectRequest = [OSSRestoreObjectRequest new]; + restoreObjectRequest.bucketName = bucketName; + restoreObjectRequest.objectKey = objectName; + + OSSTask * restoreObjecTtask = [_client restoreObject:restoreObjectRequest]; + [[restoreObjecTtask continueWithBlock:^id(OSSTask *task) { + XCTAssertNil(task.error); + OSSRestoreObjectResult *result = (OSSRestoreObjectResult *)task.result; + XCTAssertEqual(result.httpResponseCode, 202); + + return nil; + }] waitUntilFinished]; + + OSSTask * restoreObjectTask1 = [_client restoreObject:restoreObjectRequest]; + [[restoreObjectTask1 continueWithBlock:^id(OSSTask *task) { + XCTAssertNotNil(task.error); + + return nil; + }] waitUntilFinished]; + + [OSSTestUtils cleanBucket:bucketName with:_client]; +} + #pragma mark - others - (void)testAPI_get_Bucket_list_Objects