Я использую последнюю версию официального Amazon S3 SDK (1.0.14.1) для создания инструмента резервного копирования. Пока все работает правильно, если размер загружаемого файла меньше 5 МБ, но когда какой-либо из файлов превышает 5 МБ, загрузка не выполняется со следующим исключением:
System.Net.WebException: запрос был прерван: запрос был отменен. --- > System.IO.IOException: не удается закрыть поток, пока все байты не будут написано. в System.Net.ConnectStream.CloseInternal(Boolean internalCall, Boolean aborting) --- Конец внутренней трассировки стека исключений --- в Amazon.S3.AmazonS3Client.ProcessRequestError(String actionName, запрос HttpWebRequest, WebException мы, HttpWebResponse errorResponse, String requestAddr, WebHeaderCollection & respHdrs, Тип t) в Amazon.S3.AmazonS3Client.Invoke [Т] (S3Request userRequest) в Amazon.S3.AmazonS3Client.PutObject(PutObjectRequest запрос) в BackupToolkit.S3Module.UploadFile(String sourceFileName, String destinationFileName) в W:\код\AutoBackupTool\BackupToolkit\S3Module.cs: линия 88 в BackupToolkit.S3Module.UploadFiles(String sourceDirectory) в W:\код\AutoBackupTool\BackupToolkit\S3Module.cs: линия 108
Примечание: 5 МБ - это примерно граница отказа, она может быть немного ниже или что-то большее
Я предполагаю, что соединение отключено, и поток автоматически закрывается до завершения загрузки файла.
Я попытался найти способ установить длительный тайм-аут (но я не могу найти вариант в AmazonS3
или AmazonS3Config
).
Любые идеи о том, как увеличить тайм-аут (например, параметр приложения, который я могу использовать) или он не связан с проблемой тайм-аута?
код:
var s3Client = AWSClientFactory.CreateAmazonS3Client(AwsAccessKey, AwsSecretKey);
var putObjectRequest = new PutObjectRequest {
BucketName = Bucket,
FilePath = sourceFileName,
Key = destinationFileName,
MD5Digest = md5Base64,
GenerateMD5Digest = true
};
using (var upload = s3Client.PutObject(putObjectRequest)) { }