Asp.net mvc asp.net mvc文件流结果

Asp.net mvc asp.net mvc文件流结果,asp.net-mvc,Asp.net Mvc,问题的第一部分: 我在数据库中有信息,我想从数据库中获取信息,并将其保存为.txt文件保存到客户端 我已经用普通的asp.net完成了。但在mvc中还没有。我的信息不是图像。这是关于人类的信息 我注意到 问题的第二部分: 我想把文件下载到客户端。下载一个文件时没有问题,但我想一次下载3个文件和1个请求。但这是不可能做到的。所以我决定创建zip文件并生成链接。当用户点击链接时,它将下载给用户 你怎么想?这样做好吗 问题的第三部分:(新增) 成功下载后如何从目录中删除旧的.zip文件?或者另一种方式

问题的第一部分:

我在数据库中有信息,我想从数据库中获取信息,并将其保存为
.txt
文件保存到客户端

我已经用普通的asp.net完成了。但在mvc中还没有。我的信息不是图像。这是关于人类的信息

我注意到

问题的第二部分:

我想把文件下载到客户端。下载一个文件时没有问题,但我想一次下载3个文件和1个请求。但这是不可能做到的。所以我决定创建zip文件并生成链接。当用户点击链接时,它将下载给用户

你怎么想?这样做好吗

问题的第三部分:(新增)


成功下载后如何从目录中删除旧的.zip文件?或者另一种方式。比如说,使用将在服务器上运行的服务。

您可以执行以下控制器操作,该操作将从数据库获取信息并将其写入响应流,从而允许客户端下载该信息:

public ActionResult Download()
{
    string info = Repository.GetInfoFromDatabase();
    byte[] data = Encoding.UTF8.GetBytes(info);
    return File(data, "text/plain", "foo.txt");
}
在您看来,请提供此行动的链接:

<%= Html.ActionLink("Downoad file", "Download") %>

您可以使用下面的操作筛选器删除返回的临时文件。然后将该属性应用于MVC操作方法

    public class DeleteTempFileResultFilter : ActionFilterAttribute
    {
        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            string fileName = ((FilePathResult)filterContext.Result).FileName;

            filterContext.HttpContext.Response.Flush();
            filterContext.HttpContext.Response.End();

            System.IO.File.Delete(fileName);
        }
    }

是的,我查过了。但是Encoding.UTF8.GetBytes()接受字符串作为字符串。但是我的结果来自Repository.GetInfoFromDatabase();不会出现简单的字符串。它可以是FirstName、LastName、Patronymic…@AEMLoviji等信息,在这种情况下,您需要使用服务层。此服务层将调用您的存储库方法,并生成一个字符串或任何您希望从模型向客户机发送信息的格式。然后,您的控制器将调用服务层方法,该方法将向客户端返回字符串和流。我认为是这样。有没有其他方法可以将IEnumreable转换为byte[]?@AEMLoviji,没有,因为这毫无意义。您需要手动将模型对象的转换/序列化写入字节数组,或者使用内置序列化程序的标准格式之一:XML、JSON。谢谢您的回答。这对我很有帮助。谢谢你编辑了我的问题