首页 > 解决方案 > 上传到 AWS S3 时无法访问关闭的流

问题描述

我正在尝试从我的 .NET 核心应用程序将文件上传到 AWS S3。

我创建了一个 PDF 类型byte[]并将其传递给以下函数:

public async Task<S3Response> UploadFileAsync(string bucketName, byte[] file)
{
    try
    {
        var fileTransferUtility = new TransferUtility(_s3Client);
        var fileTransferUtilityRequest = new TransferUtilityUploadRequest
        {
            BucketName = bucketName,
            StorageClass = S3StorageClass.Standard,
            PartSize = 6291456,
            CannedACL = S3CannedACL.NoACL,
            Key = "Test.pdf"
        };

        using (var ms = new MemoryStream(file))
        {
            fileTransferUtilityRequest.InputStream = ms;
        }

        await fileTransferUtility.UploadAsync(fileTransferUtilityRequest);
    }
    catch (AmazonS3Exception e)
    {
        return new S3Response
        {
            Message = e.Message,
            Status = e.StatusCode
        };
    }
}

我的 catch 处理程序触发的错误是:

无法访问已关闭的流

我究竟做错了什么?

标签: c#.net.net-core

解决方案


您的using语句会导致MemoryStream您创建的 . 在您尝试将其传递给之前关闭UploadAsync。相反,UploadAsync从你的块内部调用:using

using (var ms = new MemoryStream(file))
{
    fileTransferUtilityRequest.InputStream = ms;
    await fileTransferUtility.UploadAsync(fileTransferUtilityRequest);
}    

推荐阅读