Mac用のAmazonsdkを使用して巨大なファイル(8GB)をアップロードしようとしました(MAC用のsdkはありませんが、UIKit参照を削除してIOS sdkソースコードを変更し、MAC用に再コンパイルしました)。それは実際にはファイルに対して機能しており、おそらく最大800MB〜1GBです。しかし、8GBのファイルをアップロードしようとすると、例外が発生します。例外は「インターネット接続が失われた」ということです。奇妙なことに、私はインターネット接続が良好です(2Mbpsのアップロード速度:-/)。マルチパートアップロードAPIを使用しており、5MBのチャンクをアップロードしています。例外が発生した場合、私はあきらめていませんが、同じチャンクを少なくとも5回再試行してから、あきらめます。この再試行の間に、私は数秒間眠っています。しかし、最も驚くべき部分は、チャンクのアップロードが例外に直面すると、再試行では実際には機能しないことです。わかりません。誰かが私を助けることができますか????
前もって感謝します!
以下もコードを追加しています!
fileHandle = [NSFileHandle fileHandleForReadingAtPath:filePath];
S3InitiateMultipartUploadRequest* initReq = [[S3InitiateMultipartUploadRequest alloc] initWithKey:requestDetails.md5 inBucket:requestDetails.bucket];
initReq.contentType = requestDetails.contentType;
S3MultipartUpload* upload = [amazonS3Client_ initiateMultipartUpload:initReq].multipartUpload;
S3CompleteMultipartUploadRequest* compReq = [[S3CompleteMultipartUploadRequest alloc] initWithMultipartUpload:upload];
compReq.contentType = requestDetails.contentType;
NSData* data = [fileHandle readDataOfLength:PART_SIZE];
int part = 0;
...............................
while([data length] > 0)
{
@try {
S3UploadPartRequest* upReq = [[S3UploadPartRequest alloc] initWithMultipartUpload:upload];
upReq.partNumber = part + 1;
upReq.contentLength = data.length;
upReq.data = data;
upReq.contentType = requestDetails.contentType;
response = [amazonS3Client_ uploadPart:upReq];
[compReq addPartWithPartNumber:(part + 1) withETag:response.etag];
offset += [data length];
[fileHandle seekToFileOffset:offset];
data = [fileHandle readDataOfLength:PART_SIZE];
part++;
........................
}
@catch (AmazonClientException *exception) {
.............................
if([exception.message rangeOfString:@"expire"].location != NSNotFound)
{
// renew credentials code
return [self multipartUpload:requestDetails withFilePath:filePath];
}
}
}
[amazonS3Client_ completeMultipartUpload:compReq];