使用WebAPI / MVC下载Excel文件

我正试图通过WebAPI下载Excel文件。 基本上Excel文件是通过记忆stream在这篇文章的帮助下创build的

Excel Content正在生成,但是我无法下载Excel,因为当我在Chrome Network Tools的“响应”选项卡中看到响应时,响应本身就是纯XML。 以下是我的代码为C#

var sheet = linq.ExportToExcel(userAddedList);

var stream = new MemoryStream(); var sw = new StreamWriter(stream); sw.Write(sheet); sw.Flush(); var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(stream.GetBuffer()) }; result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "Report.xml" }; result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/ms-excel"); var response = ResponseMessage(result); return response; 

这就是我如何通过Angular调用它。

var httpRequest = commonFunctions.getRequestObject(“GET”,requestURL,{},null);

  $http(httpRequest).then(function (response) { vm.isProcessing = false; }, function (error) { displayError(error); }); 

如果您要定位的浏览器支持File API,则可以使用Blob对象 。 这是从这个小提琴中取出的一个function,

 var setFile = function( data, fileName, fileType ) { // Set objects for file generation. var blob, url, a, extension; // Get time stamp for fileName. var stamp = new Date().getTime(); // Set MIME type and encoding. fileType = ( fileType || "text/csv;charset=UTF-8" ); extension = fileType.split( "/" )[1].split( ";" )[0]; // Set file name. fileName = ( fileName || "ActiveVoice_" + stamp + "." + extension ); // Set data on blob. blob = new Blob( [ data ], { type: fileType } ); // Set view. if ( blob ) { // Read blob. url = window.URL.createObjectURL( blob ); // Create link. a = document.createElement( "a" ); // Set link on DOM. document.body.appendChild( a ); // Set link's visibility. a.style = "display: none"; // Set href on link. a.href = url; // Set file name on link. a.download = fileName; // Trigger click of link. a.click(); // Clear. window.URL.revokeObjectURL( url ); } else { // Handle error. } }; 

你可以使用它作为你的代码的一部分,如下所示:

 $http(httpRequest).then(function (response) { vm.isProcessing = false; setFile(response.data, "Report.xls", "application/ms-excel"); }, function (error) { displayError(error); });