Сервис загрузки Amazon s3 не загружает большие файлы - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть приложение UWP, которое загружает файл в S3 Bucket, используя AWS SDK для. NET (высокоуровневый API), который является TransferUtility.
Этот API очень хорошо работает, когда я загружаю небольшой размер записываемых файлов, но когда я загружаю большие файлы, файл, кажется, не загружается, и выдает следующие ошибки: Произошла ошибка при отправке запроса. // в некоторых тестах Задача была отменена.

Чтобы исправить эту ошибку, я сослался на несколько ресурсов из inte rnet, но не смог получить решение. Я также попытался добавить различные параметры в TransferUtilityUploadRequest, например PartSize, чтобы определить размер составного сегмента, добавил TransferUtilityConfig в качестве дополнительного параметра для TransferUtility, настроил различные RegionEndPoints, используемые при отправке запроса на загрузку. Добавление этих изменений не имело никакого значения при загрузке больших файлов в корзину s3.

Ниже приведен фрагмент кода, который я использую

 int MB_SIZE = (int)Math.Pow(2, 20);

 var s3Client = new AmazonS3Client(objUploadRecording.AccessKeyId, objUploadRecording.SecretAccessKey,objUploadRecording.Token, region);

 var transferUtilityConfig = new TransferUtilityConfig
  {
     // Use 5 concurrent requests.
      ConcurrentServiceRequests = 5,

       // Use multipart upload for file size greater 1 MB.
        MinSizeBeforePartUpload = 1 * MB_SIZE,
      };
   using (var transferUtility = new TransferUtility(s3Client, transferUtilityConfig))
    {
      var uploadRequest = new TransferUtilityUploadRequest
       {
        BucketName = objUploadRecording.BucketName,
        Key = objUploadRecording.S3Filename,
        FilePath = objUploadRecording.FilePath,
        // Set size of each part for multipart upload to 1 MB
        PartSize = 1 * MB_SIZE
         };
        uploadRequest.UploadProgressEvent += OnUploadProgressEvent;
         CancellationToken cancellationToken = default(CancellationToken);
        try
         {
          await transferUtility.UploadAsync(uploadRequest, ancellationToken);
         }
        catch (Exception ex)
        {                                                    
         LoggingServices.Instance.WriteLine<RecordingListPage>("AWS Upload         
         Error: " + ex.Message.ToString(), MetroLog.LogLevel.Error);
        }

Может кто-нибудь подсказать мне, где я делаю ошибку или какие дополнительные параметры мне придется добавить сюда, чтобы эта работа работала?

1 Ответ

0 голосов
/ 08 мая 2020

Спасибо всем, как я уже говорил, я использовал aws SDK высокого уровня для загрузки файла, но он не работал. Кроме того, я не нашел какой-либо другой реализации или решения, которое помогло бы избавиться от проблем, вызывающих мое приложение. Поэтому я использовал низкоуровневый API здесь

, и этот файл успешно загружен. Есть недостаток в том, что он загружает файл по частям, но это хорошо для меня.

...