【问题标题】:HTML 5 anchor tag download incomplete file?HTML 5 锚标签下载不完整的文件?
【发布时间】:2016-02-23 15:02:11
【问题描述】:

我正在使用 Angular 和 ASP.NET Web API 来允许用户下载在服务器上生成的文件。

用于下载链接的 HTML 标记:

 <img src="/content/images/table_excel.png">
 <a ng-click="exportToExcel(report.Id)">Excel Model</a>
 <a id="report_{{report.Id}}" target="_self"></a>

最后一个锚标记用作自动点击事件的占位符。可见锚点调用exportToExcel 方法来发起对服务器的调用并开始创建文件。

$scope.exportToExcel = function(reportId) {
    reportService.excelExport(reportId, function (result) {
        var url = "/files/report_" + reportId + "/" + result.data.Model.fileName;
        var dLink = document.getElementById("report_" + reportId);
        dLink.href = url;
        dLink.setAttribute('download', result.data.Model.fileName);
        dLink.click();
    });
}

Web API 代码创建一个 Excel 文件。该文件在服务器上约为 279k,但在客户端下载时只有 7k。我的第一个想法是在文件完全写入之前可能会发生自动点击。因此,我在 click 事件周围添加了 10 秒 $timeout 作为测试。它失败了,结果相同。

这似乎只发生在我们的远程 QA 服务器上。在我的本地开发服务器上,我总是取回整个文件。我不知道为什么会发生这种情况。我们有类似的功能,文件从数据库 blob 构建并保存到本地磁盘以供下载。客户端下载采用相同的方法,并且似乎工作正常。我想知道是否有其他人遇到过类似的问题。

更新 在 SilentTremmor 发表评论后,我们认为它实际上可能是 IIS 或某种服务器问题。最初,我们认为它不可能,但经过一番挖掘,它可能是。客户端代码的实例似乎只允许下载 7k 的数据。不管我们尝试下载什么结果总是一样的。

【问题讨论】:

  • 检查你的服务器设置或代码iis.net/configreference/system.webserver/asp/limits 但据我了解,如果文件生成正确(你可以用excel打开它)你可能会遇到另一个问题,在文件系统中你可能有类似名称的文件。
  • @SilentTremor,我认为这不是 IIS 问题,因为就像我说的那样,我们将 DB blob 文件写入同一个目录,并且下载都很好。你是对的,文件正在服务器上创建,我可以打开它。出于某种原因,我只取回了 295k 文件中的 7k。不过,我很感谢您的回复

标签: javascript c# angularjs google-chrome asp.net-web-api


【解决方案1】:

原来 API 应用程序正在将文件写入我们应用程序的另一个实例。客户端代码不知道,并试图下载一个不存在的文件。因此,当下载链接创建文件时,它是空的,因此文件很小。

【讨论】:

  • 这个怎么做?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 2020-04-27
相关资源
最近更新 更多