如何修改C# WebAPI中FileStreamResult下载文件的文件名?
修改CSV下载文件名的解决方案
要修改前端下载的文件名,只需在返回FileStreamResult时设置FileDownloadName属性即可,同时可以优化控制器的返回逻辑(原代码用Ok()包裹FileStreamResult没必要,直接返回结果更规范)。
修改后的代码示例
[HttpGet("GetCSV")] public async Task<ActionResult<FileStreamResult>> GetCSV() { var ret = getfile(); return ret; // 直接返回FileStreamResult,无需用Ok包裹 } public FileStreamResult getfile() { MemoryStream stream = new MemoryStream(); try { // some list string csv = CsvSerializer.SerializeToCsv(list); stream = GenerateStreamFromString(csv); // 设置自定义下载文件名 return new FileStreamResult(stream, "text/csv") { FileDownloadName = "我的自定义CSV文件.csv" }; } finally { stream.Flush(); } } public MemoryStream GenerateStreamFromString(string s) { byte[] byteArray = Encoding.ASCII.GetBytes(s); MemoryStream stream = new MemoryStream(byteArray); return stream; }
简化写法(推荐)
也可以直接使用ControllerBase.File方法,一步完成流、MIME类型和文件名的设置:
public FileStreamResult getfile() { // some list string csv = CsvSerializer.SerializeToCsv(list); var stream = GenerateStreamFromString(csv); // 直接通过File方法指定文件名 return File(stream, "text/csv", "我的自定义CSV文件.csv"); }
原理说明
设置FileDownloadName后,接口响应会自动带上Content-Disposition响应头,格式为:
Content-Disposition: attachment; filename="我的自定义CSV文件.csv"
前端浏览器会读取这个头里的filename值,以此作为下载文件的名称,替代默认的接口名GetCSV。
内容的提问来源于stack exchange,提问作者Venkat
相关产品推荐
相关产品推荐

