ASP.NET 静态 WebMethod 下载文件 [重复]

Posted

技术标签:

【中文标题】ASP.NET 静态 WebMethod 下载文件 [重复]【英文标题】:ASP.NET static WebMethod download file [duplicate] 【发布时间】:2015-10-10 18:23:50 【问题描述】:

我正在尝试使用 ASP.NET 静态 WebMethod 生成和下载 Excel 文件,该方法是通过 jQuery 的 Ajax 调用的。

[WebMethod]
public static void ExportToExcel(List<ResultGroupItem> searchResult)

    HttpResponse response = HttpContext.Current.Response;

    ExcelExporter excelExporter = new ExcelExporter();
    excelExporter.ExportToExcel(searchResult, response);

在我的 ExportToExcel 方法中,我生成 xls 文件,然后添加 http 标头以下载文件。

// excelFileBytes is a byte array holding the data to be written
if (excelFileBytes != null)

    response.Clear();
    response.ContentType = "application/octet-stream";
    response.AddHeader("content-disposition", string.Format("attachment; filename=\"0\"", fileName));
    response.Flush();
    response.BinaryWrite(excelFileBytes);
    response.Flush();
    response.End();

我知道我的代码正在运行,但从 Ajax 调用它并没有启动下载。这是我得到的响应(通过 Mozilla Firefox 中的 FireBug):

如何从 Ajax 启动文件下载?

【问题讨论】:

有问题吗? 是的,这看起来像是一些 XML 文件的 ZIP 存档(前导 PK 字符)(希望很明显),这就是现代 Office XML 文件。所以,服务器代码看起来不错。 但是,再次阅读您的问题,我意识到您的客户端代码可能注定要失败。如果您搜索ajax trigger download,您应该会找到大量结果来解释为什么它不起作用。 【参考方案1】:

有点不清楚,您要做什么,但如果我理解正确,您想在浏览器不打开新标签等的情况下启动文件下载。

你应该可以使用

<a href="/link/to/file" download>anchor text</a>

由于您的 content-disposition: 附件标头,可能不需要“下载”属性。

【讨论】:

您好 Jimmy,excel 文件是使用 javascript 提供的 List 动态生成的。硬盘上不存在的可以通过指定路径来下载。 您可能需要有一个
,其 method="post" 和操作设置为与您在 ajax 调用中使用的 URL 相同。然后有一个按钮或一个提交表单的锚。
我试试看,谢谢【参考方案2】:

如果您使用的是 jquery,请从客户端尝试类似的操作

" $("form action='" + downloadUrl + "' method='post'> /form>").appendTo(document.body).submit() ";

【讨论】:

由于输入限制,表单标签格式不正确。

以上是关于ASP.NET 静态 WebMethod 下载文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

JQuery ajax调用asp.net的webMethod

使用格式错误的 Json 调用 ASP.NET WebMethod 时捕获错误

利用JQuery直接调用asp.net后台方法

如何在 UserControl (.ascx) 中调用 ASP.NET WebMethod

ASP.NET 自定义验证器 + WebMethod + jQuery

ASP.NET使用WebMethod