Skip to content
This repository has been archived by the owner on Jan 17, 2023. It is now read-only.

Commit

Permalink
Squashed commit of the following:
Browse files Browse the repository at this point in the history
commit 2d0f5e254e38b3a2e2b9e5efaea1175a2186351c
Author: Mattt Thompson <m@mattt.me>
Date:   Sun Jan 18 10:01:15 2015 -0800

    etag -> ETag

commit a1fa70595316999b93f870d3d4d9199a280be422
Author: Mattt Thompson <m@mattt.me>
Date:   Sun Jan 18 10:00:50 2015 -0800

    Reimplementing AFAmazonS3ResponseObject- description

commit 0ae0f2e2fcb169463b85556824eff6ada704fd61
Author: Mattt Thompson <m@mattt.me>
Date:   Sun Jan 18 10:00:18 2015 -0800

    Consolidating AFAmazonS3ResponseObject into serializer

    Minor reformatting

commit b210d2f899c5e6aa8252f20bd9010f2224946921
Merge: 6fc02e0 7fc5e00
Author: Mattt Thompson <m@mattt.me>
Date:   Sun Jan 18 09:52:24 2015 -0800

    Merge branch 'issue70' of https://github.com/abbeycode/AFAmazonS3Manager into abbeycode-issue70

commit 7fc5e00
Author: Dov Frankel <dov@abbey-code.com>
Date:   Wed Jan 14 16:42:23 2015 -0500

    Removed reference to XML responses from readme (issue #70)

commit 65df718
Author: Dov Frankel <dov@abbey-code.com>
Date:   Wed Jan 14 16:01:12 2015 -0500

    Updated readme to reflect new response object (issue #70)

commit 5a1bcf6
Author: Dov Frankel <dov@abbey-code.com>
Date:   Wed Jan 14 15:22:08 2015 -0500

    Added custom response handling to the library (Issue #70)

Signed-off-by: Mattt Thompson <m@mattt.me>
  • Loading branch information
abbeycode authored and mattt committed Jan 18, 2015
1 parent 6fc02e0 commit cb839cc
Show file tree
Hide file tree
Showing 4 changed files with 150 additions and 6 deletions.
3 changes: 2 additions & 1 deletion AFAmazonS3Manager/AFAmazonS3Manager.m
Expand Up @@ -21,6 +21,7 @@
// THE SOFTWARE.

#import "AFAmazonS3Manager.h"
#import "AFAmazonS3ResponseSerializer.h"

NSString * const AFAmazonS3ManagerErrorDomain = @"com.alamofire.networking.s3.error";

Expand All @@ -42,7 +43,7 @@ - (instancetype)initWithBaseURL:(NSURL *)url {
}

self.requestSerializer = [AFAmazonS3RequestSerializer serializer];
self.responseSerializer = [AFXMLParserResponseSerializer serializer];
self.responseSerializer = [AFAmazonS3ResponseSerializer serializer];

return self;
}
Expand Down
67 changes: 67 additions & 0 deletions AFAmazonS3Manager/AFAmazonS3ResponseSerializer.h
@@ -0,0 +1,67 @@
// AFAmazonS3ResponseSerializer.h
//
// Copyright (c) 2011–2015 AFNetworking (http://afnetworking.com/)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

#import "AFURLResponseSerialization.h"

/**
Returns an `AFAmazonS3ResponseObject` object from the AmazonS3 HTTP response
*/
@interface AFAmazonS3ResponseSerializer : AFHTTPResponseSerializer

@end

#pragma mark -

/**
Returned as the response object for S3 requests
*/
@interface AFAmazonS3ResponseObject : NSObject

/**
Creates a new from the HTTP response S3 returns
@param response AFAmazonS3ResponseObject
@return Returns an initialized instance of AFAmazonS3ResponseObject
*/
+ (instancetype)responseObject:(NSHTTPURLResponse *)response;

///-------------------------
/// @name Reading Attributes
///-------------------------

/**
The URL of the file sent to or retrieved from S3
*/
@property (readonly, nonatomic, copy) NSURL *URL;

/**
Contains the MD5 hash S3 computed for the file in the request
*/
@property (readonly, nonatomic, copy) NSString *ETag;

/**
The original NSHTTPURLResponse object returned by S3
*/
@property (readonly, nonatomic, strong) NSHTTPURLResponse *originalResponse;

@end
79 changes: 79 additions & 0 deletions AFAmazonS3Manager/AFAmazonS3ResponseSerializer.m
@@ -0,0 +1,79 @@
// AFAmazonS3ResponseSerializer.m
//
// Copyright (c) 2011–2015 AFNetworking (http://afnetworking.com/)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

#import "AFAmazonS3ResponseSerializer.h"

@implementation AFAmazonS3ResponseSerializer

- (id)responseObjectForResponse:(NSURLResponse *)response
data:(NSData *)data
error:(NSError * __autoreleasing *)error
{
if ([self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) {
return [AFAmazonS3ResponseObject responseObject:(NSHTTPURLResponse *)response];
}

return nil;
}

@end

#pragma mark -

@interface AFAmazonS3ResponseObject ()
@property (readwrite, nonatomic, strong) NSHTTPURLResponse *originalResponse;
@end

#pragma mark -

@implementation AFAmazonS3ResponseObject

+ (instancetype)responseObject:(NSHTTPURLResponse *)response {
AFAmazonS3ResponseObject *responseObject = [[AFAmazonS3ResponseObject alloc] init];
responseObject.originalResponse = response;

return responseObject;
}

#pragma mark -

- (NSURL *)URL {
return self.originalResponse.URL;
}

- (NSString *)ETag {
NSString *ETag = self.originalResponse.allHeaderFields[@"ETag"];

if ([ETag length] == 0) {
return nil;
}

return [ETag stringByReplacingOccurrencesOfString:@"\"" withString:@""];
}

#pragma mark - NSObject

- (NSString *)description {
return [NSString stringWithFormat:@"<%@: %p, URL: %@, ETAG: %@, originalResponse: %@>", NSStringFromClass([self class]), self, [self.URL absoluteString], self.ETag, self.originalResponse];
}

@end
7 changes: 2 additions & 5 deletions README.md
Expand Up @@ -2,8 +2,6 @@

`AFAmazonS3Manager` is an `AFHTTPRequestOperationManager` subclass for interacting with the [Amazon S3 API](http://aws.amazon.com/s3/).

As the S3 API returns XML responses, you may find it useful to set [AFOnoResponseSerializer](https://github.com/AFNetworking/AFOnoResponseSerializer) as the response serializer.

## Example Usage

```objective-c
Expand All @@ -19,9 +17,8 @@ NSString *destinationPath = @"/pathOnS3/to/file.txt";
progress:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
NSLog(@"%f%% Uploaded", (totalBytesWritten / (totalBytesExpectedToWrite * 1.0f) * 100));
}
success:^(id responseObject) {
NSURL *resultURL = [s3manager.requestSerializer.endpointURL URLByAppendingPathComponent:destinationPath];
NSLog(@"Upload Complete: %@", resultURL);
success:^(AFAmazonS3ResponseObject *responseObject) {
NSLog(@"Upload Complete: %@", responseObject.URL);
}
failure:^(NSError *error) {
NSLog(@"Error: %@", error);
Expand Down

0 comments on commit cb839cc

Please sign in to comment.