Я реализовал загрузку нескольких частей S3, как высокоуровневую, так и низкоуровневую версию, на основе примера кода из http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?HLuploadFileJava.html и http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?llJavaUploadFile.html
Когда я загрузил файлы размером менее 4 ГБ, процессы загрузки завершились без проблем. Когда я загрузил файл размером 13 ГБ, код начал показывать исключение ввода-вывода, сломанные каналы. После повторных попыток это все равно не удалось.
Вот способ повторить сценарий. Возьмите релиз 1.1.7.1,
Пока проблема обнаруживается стабильно. Я приложил сюда файл tcpdump для сравнения. Там хост на стороне S3 продолжал сбрасывать сокет.
Хотя это код C #, он показывает настройки таймаута и разделения, которые я использую для успешного копирования файлов размером до 15 ГБ. Возможно, для AutoCloseStream необходимо установить значение false.
using (FileStream fileStream = File.OpenRead(file.FullName))
{
TransferUtilityUploadRequest request = new TransferUtilityUploadRequest()
{
AutoCloseStream = false,
Timeout = 1200000,
BucketName = Settings.Bucket,
Key = file.Name,
InputStream = fileStream,
PartSize = 6291456 // 6MB
};
Console.Write("{0}...", file.Name);
Begin();
tu.Upload(request);
End();
Console.WriteLine("Done. [{0}]", Duration());
}