前端基本是需要模拟出来一个form表单,通过form表单来请求一个action,然后这个action返回一个Stream,这里使用JavaScript来构造一个html表单,然后在自动提交去请求服务action
CreateForm: function (actionUrl, data) {if ($("#downloadFrame").length > 0) {$("#downloadFrame").remove();$("#downloadQueryForm").remove();} // modal.showLoading()var $iframe = $('').appendTo($("body"));$('').appendTo("body");document.forms["downloadQueryForm"].submit();}
actionUrl就是后台api接口,data是参数。 然后后台接口api返回的时候,返回值修改一些类型。
public HttpResponseMessage DownloadFile() { var contextRequest = (HttpContextWrapper)Request.Properties["MS_HttpContext"]; //获取传统context' var filePath = contextRequest.Request.MapPath("/ExportFiles"); try { var downloadFileName = "xxx.jpn"; var bytes = File.ReadAllBytes(filePath); MemoryStream ms = new MemoryStream(bytes); ms.Flush(); ms.Position = 0; HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = new StreamContent(ms); response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream"); response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") { FileName = downloadFileName }; return response; } catch (Exception ex) { return new HttpResponseMessage(); } }