filesbox/app/filesbox_ios/FilesBox/Pods/ASIHTTPRequest/Classes/S3/ASIS3ObjectRequest.m
2023-09-21 10:53:23 +08:00

165 lines
5.3 KiB
Objective-C

//
// ASIS3ObjectRequest.m
// Part of ASIHTTPRequest -> http://allseeing-i.com/ASIHTTPRequest
//
// Created by Ben Copsey on 16/03/2010.
// Copyright 2010 All-Seeing Interactive. All rights reserved.
//
#import "ASIS3ObjectRequest.h"
NSString *const ASIS3StorageClassStandard = @"STANDARD";
NSString *const ASIS3StorageClassReducedRedundancy = @"REDUCED_REDUNDANCY";
@implementation ASIS3ObjectRequest
- (ASIHTTPRequest *)HEADRequest
{
ASIS3ObjectRequest *headRequest = (ASIS3ObjectRequest *)[super HEADRequest];
[headRequest setKey:[self key]];
[headRequest setBucket:[self bucket]];
return headRequest;
}
+ (id)requestWithBucket:(NSString *)theBucket key:(NSString *)theKey
{
ASIS3ObjectRequest *newRequest = [[[self alloc] initWithURL:nil] autorelease];
[newRequest setBucket:theBucket];
[newRequest setKey:theKey];
return newRequest;
}
+ (id)requestWithBucket:(NSString *)theBucket key:(NSString *)theKey subResource:(NSString *)theSubResource
{
ASIS3ObjectRequest *newRequest = [[[self alloc] initWithURL:nil] autorelease];
[newRequest setSubResource:theSubResource];
[newRequest setBucket:theBucket];
[newRequest setKey:theKey];
return newRequest;
}
+ (id)PUTRequestForData:(NSData *)data withBucket:(NSString *)theBucket key:(NSString *)theKey
{
ASIS3ObjectRequest *newRequest = [self requestWithBucket:theBucket key:theKey];
[newRequest appendPostData:data];
[newRequest setRequestMethod:@"PUT"];
return newRequest;
}
+ (id)PUTRequestForFile:(NSString *)filePath withBucket:(NSString *)theBucket key:(NSString *)theKey
{
ASIS3ObjectRequest *newRequest = [self requestWithBucket:theBucket key:theKey];
[newRequest setPostBodyFilePath:filePath];
[newRequest setShouldStreamPostDataFromDisk:YES];
[newRequest setRequestMethod:@"PUT"];
[newRequest setMimeType:[ASIHTTPRequest mimeTypeForFileAtPath:filePath]];
return newRequest;
}
+ (id)DELETERequestWithBucket:(NSString *)theBucket key:(NSString *)theKey
{
ASIS3ObjectRequest *newRequest = [self requestWithBucket:theBucket key:theKey];
[newRequest setRequestMethod:@"DELETE"];
return newRequest;
}
+ (id)COPYRequestFromBucket:(NSString *)theSourceBucket key:(NSString *)theSourceKey toBucket:(NSString *)theBucket key:(NSString *)theKey
{
ASIS3ObjectRequest *newRequest = [self requestWithBucket:theBucket key:theKey];
[newRequest setRequestMethod:@"PUT"];
[newRequest setSourceBucket:theSourceBucket];
[newRequest setSourceKey:theSourceKey];
return newRequest;
}
+ (id)HEADRequestWithBucket:(NSString *)theBucket key:(NSString *)theKey
{
ASIS3ObjectRequest *newRequest = [self requestWithBucket:theBucket key:theKey];
[newRequest setRequestMethod:@"HEAD"];
return newRequest;
}
- (id)copyWithZone:(NSZone *)zone
{
ASIS3ObjectRequest *newRequest = [super copyWithZone:zone];
[newRequest setBucket:[self bucket]];
[newRequest setKey:[self key]];
[newRequest setSourceBucket:[self sourceBucket]];
[newRequest setSourceKey:[self sourceKey]];
[newRequest setMimeType:[self mimeType]];
[newRequest setSubResource:[self subResource]];
[newRequest setStorageClass:[self storageClass]];
return newRequest;
}
- (void)dealloc
{
[bucket release];
[key release];
[mimeType release];
[sourceKey release];
[sourceBucket release];
[subResource release];
[storageClass release];
[super dealloc];
}
- (void)buildURL
{
if ([self subResource]) {
[self setURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://%@.%@%@?%@",[self requestScheme],[self bucket],[[self class] S3Host],[ASIS3Request stringByURLEncodingForS3Path:[self key]],[self subResource]]]];
} else {
[self setURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://%@.%@%@",[self requestScheme],[self bucket],[[self class] S3Host],[ASIS3Request stringByURLEncodingForS3Path:[self key]]]]];
}
}
- (NSString *)mimeType
{
if (mimeType) {
return mimeType;
} else if ([self postBodyFilePath]) {
return [ASIHTTPRequest mimeTypeForFileAtPath:[self postBodyFilePath]];
} else {
return @"application/octet-stream";
}
}
- (NSString *)canonicalizedResource
{
if ([[self subResource] length] > 0) {
return [NSString stringWithFormat:@"/%@%@?%@",[self bucket],[ASIS3Request stringByURLEncodingForS3Path:[self key]], [self subResource]];
}
return [NSString stringWithFormat:@"/%@%@",[self bucket],[ASIS3Request stringByURLEncodingForS3Path:[self key]]];
}
- (NSMutableDictionary *)S3Headers
{
NSMutableDictionary *headers = [super S3Headers];
if ([self sourceKey]) {
NSString *path = [ASIS3Request stringByURLEncodingForS3Path:[self sourceKey]];
[headers setObject:[[self sourceBucket] stringByAppendingString:path] forKey:@"x-amz-copy-source"];
}
if ([self storageClass]) {
[headers setObject:[self storageClass] forKey:@"x-amz-storage-class"];
}
return headers;
}
- (NSString *)stringToSignForHeaders:(NSString *)canonicalizedAmzHeaders resource:(NSString *)canonicalizedResource
{
if ([[self requestMethod] isEqualToString:@"PUT"] && ![self sourceKey]) {
[self addRequestHeader:@"Content-Type" value:[self mimeType]];
return [NSString stringWithFormat:@"PUT\n\n%@\n%@\n%@%@",[self mimeType],dateString,canonicalizedAmzHeaders,canonicalizedResource];
}
return [super stringToSignForHeaders:canonicalizedAmzHeaders resource:canonicalizedResource];
}
@synthesize bucket;
@synthesize key;
@synthesize sourceBucket;
@synthesize sourceKey;
@synthesize mimeType;
@synthesize subResource;
@synthesize storageClass;
@end