我正在尝试使用适用于 MAC 的 Amazon sdk 上传一个巨大的文件(8GB)(尽管他们没有适用于 MAC 的 sdk,但我已经通过删除 UIKit 引用并为 MAC 重新编译来修改了 IOS sdk 源代码)。它实际上适用于文件,可能高达 800MB ~ 1GB。但是每当我尝试上传一个 8GB 的文件时,我都会遇到异常。异常说“Internet 连接丢失”。很奇怪,我的互联网连接良好(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];