C#创建xls或csv文件并创建下载文件的链接

时间:2017-01-01 22:20:37

标签: c# .net excel csv download

我现在有这种情况:

我在SQL Server中有一个表,以及一些网页用户定义的查询,这些查询生成显示结果的结果页面。控制器功能都可以使用了。

现在我希望能够将结果下载到访问该网站的本地计算机。我还不确定结果如何。我已经搜索过了,xls和csv文件看起来都很简单。但是他们只创建一个文件,然后将其保存到服务器端。

所以我的问题是:

  1. 是否必须通过创建临时文件来完成任务==>将临时文件下载到客户端==>删除服务器上的临时文件?

  2. 如果必须如此,如何创建用于下载该临时文件的按钮?如果它同时为多个用户服务会发生什么?

  3. 不确定现在该做什么,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

您应该从从Sql Server收到的数据创建一个MemoryStream。使用以下代码创建一个新类。

public abstract class FileActionResult : IHttpActionResult
    {
        private string MediaType { get; }
        private string FileName { get; }
        private Stream Data { get; }

        protected FileActionResult(Stream data, string fileName, string mediaType)
        {
            Data = data;
            FileName = fileName;
            MediaType = mediaType;
        }

        public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
        {
            Data.Position = 0;
            var response = new HttpResponseMessage
            {
                Content = new StreamContent(Data)
            };
            response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
            response.Content.Headers.ContentType = new MediaTypeHeaderValue(MediaType);
            response.Content.Headers.ContentDisposition.FileName = FileName;
            response.Content.Headers.ContentLength = Data.Length;

            return Task.FromResult(response);
        }

    }

    public class ExcelFileActionResult : FileActionResult
    {
        public ExcelFileActionResult(Stream data) : base(data, "Exported.xls", "application/vnd.ms-excel")
        {
        }
    }

从Controller调用代码。

   return new ExcelFileActionResult(stream);

stream是内存流。