Linq to CSV:将数据转换为.CSV文件并从操作返回文件而不保存服务器上的文件

时间:2014-02-17 07:18:38

标签: c# asp.net-mvc linq csv linqtocsv

LinqToCsvtutorial将我的数据转换为可下载的csv文件。

我做了什么:

我创建了一个如下所示的动作:

public FileResult GetReportCsvData(MyFilterModel model)
{
    var data = _myService.GetMyData(model);

    var fileName = String.Format("{0}_{1}_{2:yyyy_MMM_d}", Helpers.GetLoggedInUserName(), "Ad-Reports", DateTime.Today) + ".csv";
    var outputFileDescription = new CsvFileDescription { SeparatorChar = ',', FirstLineHasColumnNames = true };

    var cc = new CsvContext();
    cc.Write(data, "c:/" + fileName, outputFileDescription);

    return File("c:/" + fileName, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}

并使用以下jquery我得到了我的csv文件:

exportCsv: function () {
    var data = this.getFilters();
    var url = '/MyController/GetReportCsvData';
    var form = document.createElement('form');
    form.action = url;
    form.method = 'POST';
    form.style.display = 'none';        
    for (i in data) {
        if (data[i] != "") {
            var inputElement = document.createElement('textarea');
            inputElement.name = i;
            inputElement.value = data[i];
            form.appendChild(inputElement);
        }
    }
    document.body.appendChild(form);
    form.submit();
}

这有效,我通过下载提示获取csv文件。

我想要什么

这里使用当前代码我必须将文件保存在我的服务器上(C:/ filename),然后返回其File对象。

我不想将其保存在我的服务器上。

我必须做出哪些改变才能实现这一目标?

1 个答案:

答案 0 :(得分:-1)

在你写入磁盘的“cc.Write”上,outputFileDescription已经是一个TextStream。因此,不要先将其保存到磁盘,然后使用“File”从磁盘读取它,只需返回TextStream