首页 > 解决方案 > 带有 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 的文件。我怎样才能解决这个问题?

标签: c#asp.net-coreamazon-s3

解决方案


推荐阅读