Задание было отменено исключение при загрузке файла в корзину S3 с помощью AWS .NET SDK? - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть метод WebApi в приложении Asp.Net Core 2, который получает файл от Angular в base64 format. Мне нужно, чтобы эти файлы были сохранены на AWS S3 Bucket, я нашел код на официальных документах Amazon, но он не работает для меня.

Через несколько секунд я получаю исключение A task was cancelled.

Вот мой код:

public async Task UploadFileAsync(string base64Image)
{
    try
    {
        var fileTransferUtility = new TransferUtility(_s3Client);

        var image = Convert.FromBase64String(base64Image);
        MemoryStream memStream = new MemoryStream();
        BinaryFormatter binForm = new BinaryFormatter();
        memStream.Write(image, 0, image.Length);
        memStream.Seek(0, SeekOrigin.Begin);

        await fileTransferUtility.UploadAsync(memStream, BucketName, KeyName);
        Debug.WriteLine("Upload completed");
    }
    catch (AmazonS3Exception e)
    {
        Debug.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
    }
    catch (Exception e)
    {
        Debug.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
    }

}

Есть идеи?

1 Ответ

0 голосов
/ 22 апреля 2019

Я не знаю, как все работает в Angular, но в обычном http-запросе, поступающем на asp.net core, задачу api можно отменить по нескольким причинам:

  1. Тайм-аут (по умолчанию 100 секунд)
  2. Выполнение асинхронного метода и его не ожидание
  3. Выполнение асинхронного метода void
  4. Запуск задания в другой задаче / потоке и не ожидание его завершения

На самом деле 2-4 - это одно и то же: выполнять работу как огонь и забыть.Исходное задание завершается, и DI располагает все созданные типы, и, как мне кажется, _s3Client, один из них.Это приводит к отмене всей работы, запущенной на _s3Client.

...