Using CSVHelper to output stream to browser

前端 未结 3 1559
时光说笑
时光说笑 2020-12-05 04:32

I\'m trying to use CSVHelper to generate a CSV file and send it back to a browser, so the user can select a save location and filename and save the data.

The websit

3条回答
  •  一生所求
    2020-12-05 05:04

    Try below code:

        public FileStreamResult  ExportPayments()
        {
            var result = WriteCsvToMemory(_commonService.GetPayments()()); 
            var memoryStream = new MemoryStream(result);
            return new FileStreamResult(memoryStream, "text/csv") { FileDownloadName = "export.csv" };
        }
    
    
        public byte[] WriteCsvToMemory(IEnumerable records)
        {
            using (var memoryStream = new MemoryStream())
            using (var streamWriter = new StreamWriter(memoryStream))
            using (var csvWriter = new CsvWriter(streamWriter))
            {
                csvWriter.WriteRecords(records);
                streamWriter.Flush();
                return memoryStream.ToArray();
            }
        }
    

    Update

    Below is how to pass a complex type model to an action method which is using GET HTTP method. I don't prefer this approach, it just gives you an idea there is an approach to achieve this.

    Model

        public class Data
        {
            public int Id { get; set; }
            public string Value { get; set; }
    
            public static string Serialize(Data data)
            {
                var serializer = new JavaScriptSerializer();
                return serializer.Serialize(data);
            }
            public static Data Deserialize(string data)
            {
                var serializer = new JavaScriptSerializer();
                return serializer.Deserialize(data);
            }
        }
    

    Action:

        [HttpGet]
        public FileStreamResult ExportPayments(string model) 
        {
            //Deserialize model here 
            var result = WriteCsvToMemory(GetPayments()); 
            var memoryStream = new MemoryStream(result);
            return new FileStreamResult(memoryStream, "text/csv") { FileDownloadName = "export.csv" };
        }
    

    View:

    @{
        var data = new Data()
        {
            Id = 1,
            Value = "This is test"
        };
    }
    @Html.ActionLink("Export", "ExportPayments", new { model = Data.Serialize(data) })
    

提交回复
热议问题