我試圖使用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,但我們會看看我們能否提供幫助。 –