如何通过jquery ajax和C#下载文件
我想使用jQuery Ajax web方法下载文件,但它不起作用。
这是我对web方法的jQuery ajax调用:
function GenerateExcel() { var ResultTable = jQuery('').append(jQuery('
').append($('.hDivBox').find('thead').clone()).append($('.bDiv').find('tbody').clone())); var list = [$(ResultTable).html()]; var jsonText = JSON.stringify({ list: list }); $.ajax({ type: "POST", url: "GenerateMatrix.aspx/GenerateExcel", data: jsonText, contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { }, failure: function (response) { alert(response.d); } }); }
这是Web方法定义:
[System.Web.Services.WebMethod()] public static string GenerateExcel(List list) { HttpContext.Current.Response.AppendHeader("content-disposition", "attachment;filename=FileEName.xls"); HttpContext.Current.Response.Charset = ""; HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; HttpContext.Current.Response.Write(list[0]); HttpContext.Current.Response.End(); return ""; }
如何完成它? 请帮帮我。
还有一件事:我想在客户端PC上下载它,而不是将其保存在服务器上。
好吧,我用iframe完成了它
这是修改后的ajax函数调用
function GenerateExcel() { var ResultTable = jQuery('').append(jQuery('
').append($('.hDivBox').find('thead').clone()).append($('.bDiv').find('tbody').clone())); var list = [$(ResultTable).html()]; var jsonText = JSON.stringify({ list: list }); $.ajax({ type: "POST", url: "GenerateMatrix.aspx/GenerateExcel", data: jsonText, contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { if (isNaN(response.d) == false) { $('#iframe').attr('src', 'GenerateMatrix.aspx?ExcelReportId=' + response.d); $('#iframe').load(); } else { alert(response.d); } }, failure: function (response) { alert(response.d); } }); }
这是设计部分
在页面加载我的代码看起来像这样
Response.AppendHeader("content-disposition", "attachment;filename=FileEName.xls"); Response.Charset = ""; Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.ContentType = "application/vnd.ms-excel"; Response.Write(tableHtml); Response.End();
-
在您的视图页面添加这些 –
-
服务器端
public string Download(string file) { string filePath = Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["FileManagementPath"]); string actualFilePath = System.IO.Path.Combine(filePath, file); HttpContext.Response.ContentType = "APPLICATION/OCTET-STREAM"; string filename = Path.GetFileName(actualFilePath); String Header = "Attachment; Filename=" + filename; HttpContext.Response.AppendHeader("Content-Disposition", Header); HttpContext.Response.WriteFile(actualFilePath); HttpContext.Response.End(); return ""; }
-
在JavaScript中添加此代码
这应该工作!
假设C#代码使用正确的Excel标头响应,您只需重定向到链接而不是使用ajax:
var list = [$(ResultTable).html()]; var url = "GenerateMatrix.aspx/GenerateExcel"; var data = {list: list}; url += '?' + decodeURIComponent($.param(data)); // if url is an excel file, the browser will handle it (should show a download dialog) window.location = url;