我试图使用Amazon sdk for MAC上传一个巨大的文件(8GB)(虽然它们没有用于MAC的sdk,但我通过删除了该文件来修改了IOS sdk源代码UIKit参考并重新编译为MAC)。它实际上可以用于文件,可能高达800MB〜1GB。但每当我尝试上传8GB文件时,我都会遇到异常情况。例外说“互联网连接丢失”。奇怪,我有良好的互联网连接(2Mbps上传速度: - /)。我正在使用分段上传api并上传5MB大块。当我遇到异常时,我不会放弃,但我会重试同一块至少5次,然后放弃。在这次重试之间,我睡了几秒钟。但最让人吃惊的部分是,一旦块上传面临异常,它将不会再重试。我不明白。谁能帮我吗????S3上传程序在尝试上传大文件时抛出异常
在此先感谢!
下面我加入代码!
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];
感谢您的答复!我粘贴了上面的代码。你可以通过它。回到你的问题1:我可能会使用旧版本。我下载了6分之一秒。 2:每次重试都会创建一个新的请求。你可以在代码中看到它。 3:当我发现异常时,我很确定我有联系。还有一点要注意的是,对于大文件,我也会得到另一个例外。它说'请求超时',虽然我已将'INT_MAX'设置为超时值:-o – Advaith
要清楚:是否是上传部件请求或您检查互联网连接的例外情况? –
@Advaith对不起,要求提供更多信息,但是如果您可以包含来自AmazonLogger的额外日志记录,这可能也有助于诊断问题。我同意奇怪的是,你会得到如此大的价值超时。您肯定是以不在我们支持的用例范围内的方式来使用SDK,但我们会看看我们能否提供帮助。 –