c# - 上传到 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 处理程序触发的错误是:
无法访问已关闭的流
我究竟做错了什么?
解决方案
您的using
语句会导致MemoryStream
您创建的 . 在您尝试将其传递给之前关闭UploadAsync
。相反,UploadAsync
从你的块内部调用:using
using (var ms = new MemoryStream(file))
{
fileTransferUtilityRequest.InputStream = ms;
await fileTransferUtility.UploadAsync(fileTransferUtilityRequest);
}
推荐阅读
- python - 尝试在 Python 中使用 DKIM 签署电子邮件时出错
- node.js - 我可以创建反应应用程序但我不能创建下一个应用程序
- c - C中的指针和数组 - 区别
- pandas - 从 OnehotEncoded numpy 数组创建数据帧很热?
- python - 将数据框列添加到 numpy.array
- java - 你可以在 Android Studio 中更改布局资源的背景颜色吗?
- python-3.x - 如何在 Python3.X 中正确组合正则表达式
- mysql - 在MYSQL 8.0中使用LIKE期间使用+时如何摆脱语法错误
- reactjs - 是否可以使用循环将多个创建的组件插入一个块中
- c# - 如何使用 C# 从 Rest Sharp 中的响应中仅选择身份验证令牌?