4

s3 用のファイルをダウンロードする iOS および Android アプリがあります。世界中に顧客がいるため、CloudFront に移行したいと考えています。

そのためには、/ から URL を作成し、NSURLRequest を送信する必要があることを理解しています。これは、バケットからオブジェクトを取得するために専用の S3GetObjectRequest を使用しなくなったことを意味します。

それが唯一の方法なのだろうか、それとも CloudFront で s3 クラスを操作する方法があるのだろうか?

これは私のコードです(iOS):

- (int) request:(NSString*)request response:(NSData**)response
{    
    NSInteger httpStatus = 0;
    NSData* theData = NULL;
    NSString* cloudFrontDomain = [self cloudFrontDomain];
    if(cloudFrontDomain){
        NSString *urlString = [cloudFrontDomain stringByAppendingPathComponent: request];
        NSURL *url = [[NSURL alloc] initWithString:urlString];
        NSURLRequest *theRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
        NSError *error = nil;
        NSHTTPURLResponse *httpResponse = nil;
        theData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&httpResponse error:&error];
        httpStatus = [httpResponse statusCode];
    }
    else{
        NSString* bucket = [self s3BucketName];
        S3GetObjectRequest* s3Request = [[S3GetObjectRequest alloc] initWithKey: request withBucket:bucket];
        S3GetObjectResponse* s3Response = [s3Service getObject:s3Request];
        theData = [s3Response body];
        httpStatus = [s3Response httpStatusCode];
        [s3Request release];
    }

    if (httpStatus == 200)  {
        *response = [[NSData alloc] initWithData:theData];
    } 
    return httpStatus;
}

アンドロイド:

byte[] request(String key) {    
    String cloudFrontDomain = getCloudFrontDomain();
    if (cloudFrontDomain != null){
        try {
            String url = cloudFrontDomain + "/" + key;
            URL myFileURL = new URL(url);
            InputStream response = myFileURL.openStream();
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            IOUtils.copy(response, outputStream);
            return outputStream.toByteArray();
        } catch ... {
            ....
        }
    }
    else{
        String bucket = getS3BucketName();
        GetObjectRequest request = new GetObjectRequest(bucket, key);
        try {
            S3Object response = s3Service.getObject(request);
            if (null != response){ 
                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                IOUtils.copy(response.getObjectContent(), outputStream); 
                return outputStream.toByteArray();
            }
            else {
                return null;
            }
        }catch ... {
            ...
        }
    }
}
4

0 に答える 0