首页 > 解决方案 > .Net Core - 如何从 ResponseStream 或 StreamReader 到实际下载前端的文件?

问题描述

我希望能够通过我的网络应用程序中的链接下载文件。我正在使用 Amazon S3 将文件存储在云中,并且能够使用此处的示例将它们检索到 ResponseStream 中:

https://docs.aws.amazon.com/AmazonS3/latest/dev/RetrievingObjectUsingNetSDK.html

如何从拥有 ResponseStream 到实际能够在浏览器中下载文件?我不想把它下载到服务器上,我想把它下载到用户的下载文件夹中。我觉得我对如何做到这一点知之甚少,不知道从哪里开始。

            string responseBody = "";
            try
            {
                GetObjectRequest request = new GetObjectRequest
                {
                    BucketName = bucketName,
                    Key = keyName
                };
                using (GetObjectResponse response = await client.GetObjectAsync(request))
                using (Stream responseStream = response.ResponseStream)
                using (StreamReader reader = new StreamReader(responseStream))
                {
                    string contentType = response.Headers["Content-Type"];
                    responseBody = reader.ReadToEnd(); // Now you process the response body.

                // I read the response to the end, how do I create a file and download it?

                }
            }

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

解决方案


如果流是你要返回的文件,直接返回流即可:

return File(responseStream, response.Headers["Content-Type"]);

using但是请注意,在获取流时不应使用。ASP.NET Core 将在处理完流后处理它,但您需要它在操作范围之外持续存在。


推荐阅读