ASP.NET WebAPI如何返回携带描述、版本等完整属性的文件
解决方法
你当前的实现将文件读取为字节数组返回,仅传递了文件的纯二进制内容,既缺少文件元数据对应的响应头配置,对EXE这类PE格式文件使用通用的application/octet-streamMIME类型,也会导致客户端无法正确识别文件格式,读取内置的版本、图标、描述等资源。
按如下方式修改代码即可解决:
[HttpGet("Download_File")] public IActionResult Download_File() { var filePath = Path.GetFullPath("./myfile.exe"); // 直接用PhysicalFile返回物理文件,不要提前读入内存 return PhysicalFile( filePath, "application/vnd.microsoft.portable-executable", // EXE文件对应的专用MIME类型 Path.GetFileName(filePath), lastModified: File.GetLastWriteTime(filePath) // 传入文件修改时间,保留文件系统属性 ); }
额外检查项
如果修改后仍然存在问题,按以下步骤排查:
- 确认服务器上存放的源myfile.exe本身属性完整,没有损坏
- 检查项目是否开启了响应压缩,压缩会破坏EXE的PE结构导致属性丢失,可在Program.cs中配置排除EXE文件的压缩规则:
builder.Services.AddResponseCompression(opt => { opt.ExcludedMimeTypes.Add("application/vnd.microsoft.portable-executable"); });
内容的提问来源于stack exchange,提问作者Rafael Wille
相关产品推荐
相关产品推荐

