我正在嘗試使用Amazon S3 SDK將部分大文件上傳到S3服務器。我有以下代碼:Amazon S3 uploadPart returns null
-(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
任何想法,爲什麼它不工作?
有什麼理由降低了這個問題? –
有無論如何重新上傳失敗的部分?考茨可以說,如果上網過程中互聯網連接失敗,如何重新恢復? –