使用 web api 和 angularjs 下载 excel 文件
Posted
技术标签:
【中文标题】使用 web api 和 angularjs 下载 excel 文件【英文标题】:download excel file using web api and angularjs 【发布时间】:2021-02-13 14:10:08 【问题描述】:前端
var url = baseUrl+ "/api/Home/DownloadReport";
window.open(url);
后端
[HttpGet]
public HttpResponseMessage DownloadReport()
var stream = new System.IO.MemoryStream(File.ReadAllBytes(@"C:\Users\mypc\Desktop\Test\5\WebApplication1\Report.xlsx"));
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK)
Content = new ByteArrayContent(stream);
;
result.Content.Headers.ContentDisposition = new
System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
FileName = "myworkbook.xlsx"
;
result.Content.Headers.ContentType = new
System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentLength = stream.Length;
return result
我正在尝试使用 web API 和 angularjs 下载一个 excel 文件,但是当我单击下载按钮时,它会打开一个新选项卡,其中包含如下消息但不下载文件有人可以向我建议代码有什么问题.
StatusCode:200,ReasonPhrase:'OK',Version:1.1,Content:System.Net.Http.ByteArrayContent,Headers:Content-Type:application/octet-stream Content Disposition:attachment;filename=myworkbook.xlsx
我知道之前有人问过这个问题,但尝试了很多解决方案,但都无法解决问题
【问题讨论】:
【参考方案1】:前端
不使用window.open
,而是使用以下解决方法:
var url = baseUrl+ "/api/Home/DownloadReport";
var tmp = document.createElement('A');
tmp.href = url;
tmp.type = 'application/vnd.ms-excel';
tmp.download = 'myworkbook.xlsx';
tmp.click();
后端
尝试在MediaTypeHeaderValue
构造函数的参数中使用application/vnd.ms-excel
。
【讨论】:
我尝试了上面建议的代码。但它显示错误,例如 myworkbook.xlsx 的文件格式和扩展名不匹配。文件可能已损坏或不安全。但服务器上的输入文件是好的.我也试图改变 我也试过 application/vnd.openxmlformat-officedocument.spreadsheetml.sheet 但也没用 尝试使用StreamContent
而不是ByteArrayContent
。
谢谢。我通过将返回类型更改为 filereturn 解决了它,现在它正在工作以上是关于使用 web api 和 angularjs 下载 excel 文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 Web API 和 AngularJS 保存表单数据(选择列表)
在 AngularJS 中使用 POST 到 .net Web API 时出错