使用 csvhelper 将文件下载到特定位置

use csvhelper to download files to a specific location

我想使用 linq,然后让用户将 csv 文件下载到他们的特定位置。

我从网上学到了一些东西,学习了一个 csvhelper。 我写了一些有用的东西并下载到特定位置 (D:\export.csv),如下所示。

    public ActionResult YRecordReport()
    {
        using (var sw = new StreamWriter(@"d:\export.csv", true, Encoding.GetEncoding("big5")))
        using (var writer = new CsvWriter(sw))
        {
            var abc = from t in db.TRecordDBSet
                      join s in db.SInfoDBSet on t.SId equals s.SId
                      orderby s.sId, t.StartToEndDate
                      select new TRecord()
                      {
                          StaffId = t.SId,
                          Date = t.StartToEndDate,
                          Name = s.Cname,
                          CourseName = t.Tname,
                          Organizer = t.Organizer,
                          Hour = t.Hour,
                          Score = t.Score
                      };

            var source = abc.ToList();

            var config = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap<TRecord, TRecord_Data>();
            });

            config.AssertConfigurationIsValid();
            Mapper.Initialize(cfg => cfg.CreateMap<TRecord, TRecord_Data>());
            writer.Configuration.Encoding = Encoding.GetEncoding("big5");

            var mapper = config.CreateMapper();

            List<TRecord_Data> records = Mapper.Map<List<TRecord>, List<TRecord_Data>>(source);

            foreach (var item in records)
            {
                writer.WriteRecord(item);
            }
      }
}

因为我想让用户下载文件到他们指定的位置,我修改了下面的代码,它运行正常并且export.csv文件是空的。是我写了什么没有指定的东西吗?以及如何让用户下载并使用他们的文件名?

    [MyAuthFilter(Auth = "Admin")]
    public ActionResult YearTrainingRecordReport()
    {
        var memoryStream = new MemoryStream();
        var stream = new StreamWriter(memoryStream);
        var writer = new CsvWriter(stream);

        var abc = from t in db.TRecordDBSet
                      join s in db.SInfoDBSet on t.SId equals s.SId
                      orderby s.SId, t.StartToEndDate
                      select new TRecord()
                      {
                          Sd = t.SId,
                          Date = t.StartToEndDate,
                          Name = s.Cname,
                          CourseName = t.Tname,
                          Organizer = t.Organizer,
                          Hour = t.Hour,
                          Score = t.Score
                      };

            var source = abc.ToList();

            var config = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap<TRecord, TRecord_Data>();
            });

            config.AssertConfigurationIsValid();
            Mapper.Initialize(cfg => cfg.CreateMap<TRecord, TRecord_Data>());
            writer.Configuration.Encoding = Encoding.GetEncoding("big5");

            var mapper = config.CreateMapper();

            List<TRecord_Data> records = Mapper.Map<List<TRecord>, List<TRecord_Data>>(source);

            foreach (var item in records)
            {
                writer.WriteRecord(item);
            }

            return File(memoryStream, "text/csv", "export.csv");

}

您需要刷新编写器并重置流。

writer.Flush();
stream.Position = 0;

如果您使用的是 CsvHelper 3.0 或更高版本(目前处于预发布阶段),您还需要强制创建新记录。

writer.NextRecord();