使用AWS .NET SDK将文件上传到S3存储桶时,任务被取消异常?

时间:2019-04-21 21:04:07

标签: c# asp.net-core amazon-s3 aws-sdk

我在Asp.Net Core 2应用程序中有WebApi方法,该方法正在base64 format中从Angular接收文件。我需要将这些文件存储在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 :(得分:0)

我不知道Angular的工作方式,但是由于以下几个原因,可以取消向asp.net核心api任务发出的常规http请求:

  1. 超时(默认为100秒)
  2. 正在执行异步方法而不等待它
  3. 执行异步void方法
  4. 在不同的任务/线程中运行作业,而不必等待其完成

实际上2-4是相同的事情:执行工作就像一劳永逸。最初的任务完成和DI处理所有创建的类型和_s3Client,我相信其中之一。这将导致取消在_s3Client上启动的所有工作。