c# - 带有 C# FileStreamResult 的 Amazon S3
问题描述
我正在尝试将 Amazon S3(AWSSDK.S3 包)连接到我的 ASP.NET Core Web 应用程序。我在控制器中有这个动作
public async Task<IActionResult> GetFile(string path)
{
string contentType;
new FileExtensionContentTypeProvider().TryGetContentType(path, out contentType);
contentType = contentType ?? "application/octet-stream";
try
{
var file = await _fileService.DownloadFile(path);
return new FileStreamResult(file, contentType)
{
FileDownloadName = path
};
}
catch (Exception ex)
{
return NotFound();
}
}
_fileService.DwonloadFile 看起来像这样:
public async Task<Stream> DownloadFile(string fileName)
{
var bucketName = fileName.Split('/')[0];
var fileKey = fileName.Substring(fileName.IndexOf('/') + 1);
return await _s3service.GetObjectFromS3Async(bucketName, fileKey);
}
和 _s3service.GetObjectFromS3Async 看起来像这样:
public async Task<Stream> GetObjectFromS3Async(string bucketName, string keyName)
{
try
{
var request = new GetObjectRequest
{
BucketName = bucketName,
Key = keyName
};
using (var response = await Client.GetObjectAsync(request))
using (var responseStream = response.ResponseStream)
{
return responseStream;
}
}
catch /*(Exception e)*/
{
return null;
}
}
但是这段代码不能正常工作:在浏览器中,我得到了名称正确但大小为 0B 的文件。我怎样才能解决这个问题?
解决方案
推荐阅读
- r - R-Caret 中指定网格上度量的可视化
- javascript - 关注文本字段时如何使页脚高于移动键盘
- user-interface - Unity 3D 中的单个画布和多个面板与多个画布
- c# - 使用参数调用 Web 服务
- c# - 更改 ItemsSource 集合中的属性时如何重绘 ItemsControl ItemsPanel?
- javascript - 在右拆分中显示页面
- swift - 我可以在两个单独的视图控制器上获得相同的 firebase 数据吗?
- html - VBA Web Scrape按类名类型不匹配错误获取元素
- quad - 使用 scipy.quad 集成的 Bessel 函数不起作用
- python - 我已安装 nlopt,但收到消息:没有名为“nlopt”的模块