2

Amazon S3 SDK を使用して、大きなファイルを分割して S3 サーバーにアップロードしようとしています。次のコードがあります。

-(void)multipartUpload:(NSData*)dataToUpload inBucket:(NSString*)bucket forKey:(NSString*)key
{
    //bool using3G = ![self isWifiAvailable];

    AmazonS3Client *s3 = [[AmazonS3Client alloc] initWithAccessKey:kS3ApplicationKey withSecretKey:kS3ApplicationSecret];

    s3.timeout = 99999999;

    @try {
        //[s3 createBucketWithName:bucket];

        S3InitiateMultipartUploadRequest *initReq = [[S3InitiateMultipartUploadRequest alloc] initWithKey:key inBucket:bucket];
        S3MultipartUpload *upload = [s3 initiateMultipartUpload:initReq].multipartUpload;
        S3CompleteMultipartUploadRequest *compReq = [[S3CompleteMultipartUploadRequest alloc] initWithMultipartUpload:upload];

        int numberOfParts = [self countParts:dataToUpload];


        for ( int part = 0; part < numberOfParts; part++ ) {
            NSLog(@"%d", part);

            NSData *dataForPart = [self getPart:part fromData:dataToUpload];

            // The S3UploadInputStream was deprecated after the release of iOS6.
            NSInputStream *stream = [NSInputStream inputStreamWithData:dataForPart];

            S3UploadPartRequest *upReq = [[S3UploadPartRequest alloc] initWithMultipartUpload:upload];
            upReq.partNumber = ( part + 1 );
            upReq.contentLength = [dataForPart length];
            upReq.stream = stream;
            upReq.delegate = self;

            S3UploadPartResponse *response = [s3 uploadPart:upReq]; // <----- null returned here :(
            [compReq addPartWithPartNumber:( part + 1 ) withETag:response.etag];
        }

        [s3 completeMultipartUpload:compReq];
    }
    @catch ( AmazonServiceException *exception ) {
        NSLog( @"Multipart Upload Failed, Reason: %@", exception  );
    }
    @catch (NSException *exception) {
        NSLog( @"Other exception %@", exception);
    }
}

問題は、uploadPart メソッドが実際のサーバー応答ではなく null を返し、次の行で例外が発生することです。

エラーをチェックするためにすべてのデリゲート メソッドを実装しましたが、何も報告されていません。

コードはここからコピーされます: http://aws.amazon.com/articles/0006282245644577

なぜそれが機能しないのですか?

4

1 に答える 1

3

オブジェクトのプロパティを設定したため、メソッドuploadPartは戻ります。デリゲート メソッドで取得するか、デリゲートなしで同期呼び出しを使用する必要があります。AWS 開発者ブログでは、適切な使用方法について説明しています: http://mobile.awsblog.com/post/Tx2XVU3IRV1HBOJ/Using-the-AWS-SDK-for-iOS-Asynchronously-Part-I-Sync-vs-AsyncnildelegateS3UploadPartRequestresponse.etagrequest:didCompleteWithResponse:AmazonServiceRequestDelegate

于 2013-01-10T03:54:50.037 に答える