【问题标题】:ASP.NET static WebMethod download file [duplicate]ASP.NET 静态 WebMethod 下载文件 [重复]
【发布时间】: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,您应该会找到大量结果来解释为什么它不起作用。

标签: c# asp.net


【解决方案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() ";

【讨论】:

  • 由于输入限制,表单标签格式不正确。
猜你喜欢
  • 2018-07-11
  • 1970-01-01
  • 2015-11-02
  • 2010-12-27
  • 2011-01-09
  • 2015-02-18
  • 2019-06-08
  • 1970-01-01
相关资源
最近更新 更多