62 lines
2.1 KiB
C#
62 lines
2.1 KiB
C#
using System.Text;
|
|
using System.Xml;
|
|
using System.Xml.Serialization;
|
|
using ClosedXML.Excel;
|
|
using Microsoft.AspNetCore.Http.HttpResults;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace NejCommon.Controllers;
|
|
|
|
public static class Responses
|
|
{
|
|
public static FileStreamHttpResult RespondXlsx(this ControllerBase controller, XLWorkbook file, string fileName)
|
|
{
|
|
var stream = new MemoryStream();
|
|
file.SaveAs(stream);
|
|
|
|
stream.Seek(0, SeekOrigin.Begin);
|
|
|
|
controller.Response.Headers.Add("Content-Disposition", "inline; filename=" + fileName);
|
|
return TypedResults.File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName);
|
|
}
|
|
public static FileStreamHttpResult RespondXlsxTable<T>(this ControllerBase controller, IEnumerable<T> data, string name = "Data", string? sheetName = null)
|
|
{
|
|
if (sheetName is null)
|
|
{
|
|
//limit the name to 31 characters
|
|
sheetName = name.Length > 31 ? name.Substring(0, 31) : name;
|
|
}
|
|
|
|
var notebook = new XLWorkbook();
|
|
var sheet = notebook.Worksheets.Add(sheetName);
|
|
sheet.FirstCell().InsertTable(data);
|
|
|
|
sheet.Columns().AdjustToContents();
|
|
|
|
return controller.RespondXlsx(notebook, name + ".xlsx");
|
|
}
|
|
|
|
public static FileStreamHttpResult RespondXml<T>(this ControllerBase controller, T obj, string fileName = "Data.xml")
|
|
{
|
|
var stream = new MemoryStream();
|
|
//use utf8 encoding
|
|
var serializer = new XmlSerializer(typeof(T));
|
|
var settings = new XmlWriterSettings
|
|
{
|
|
Indent = true,
|
|
Encoding = Encoding.UTF8,
|
|
};
|
|
|
|
//Console.Writeline(stream.Length);
|
|
|
|
using (var writer = XmlWriter.Create(stream, settings))
|
|
{
|
|
serializer.Serialize(writer, obj);
|
|
//Console.Writeline(stream.Length);
|
|
stream.Seek(0, SeekOrigin.Begin);
|
|
|
|
controller.Response.Headers.Add("Content-Disposition", "inline; filename=" + fileName);
|
|
return TypedResults.File(stream, "text/xml", fileName);
|
|
}
|
|
}
|
|
} |