从服务器下载文件的最佳方式是什么

IT技术 javascript asp.net wcf
2021-01-19 21:41:47

我有一项有趣的任务,需要我从服务器 (ASP.NET) 将动态生成的文件下载到客户端。在客户端,它只是 JavaScript (jQuery),客户端能够生成大量参数来自定义数据的导出方式。

从服务器下载文件的最佳方法是什么?我应该使用 WCF 服务(例如此处描述的内容)还是像这样的简单页面

我不知道如何在不重新加载页面的情况下下载文件(我不确定 $.ajax 在这种情况下是否有效)。有人可以就这个主题给我一些指导吗?谢谢。

1个回答

首先,您可以从处理程序创建文件 .ashx

假设您有要下载的文件,download.ashx并且您有一些参数要从您的 javascript 传递,例如,download.ashx?p1=8827&p2=8831要知道您要创建什么。

然后在您的 javascript 上,您可以简单地进行重定向

window.location = "download.ashx?p1=8827&p2=8831";

或者你可以使用window.openfor 做同样的想法

window.open("download.ashx?p1=8827&p2=8831");

您的文件将开始下载。

只需确保您已设置附件标题,以及句柄上的正确内容类型,例如:

  HttpContext.Current.Response.ContentType = "application/octet-stream";
  HttpContext.Current.Response.AddHeader("Content-Disposition", 
                    "attachment; filename=" + SaveAsThisFileName);

简单明了,经过测试和工作。

您也可能对这个答案感兴趣:如何处理错误

我只是想知道建议的解决方案是否仍然是最好的。大多数现代浏览器都启用了弹出窗口阻止程序。所以这里提出的重定向作为公认的方法我认为不是最正确的解决方案。我面临同样的问题,所以如果有人能提供他/她的反馈,我将不胜感激。
2021-03-16 21:41:47
@GrigoriosKoulouraswindow.location不会弹出任何内容并开始下载。
2021-03-22 21:41:47
@Steve 如果您遇到错误,您会抛出未找到的页面,请记录错误并修复它。
2021-03-27 21:41:47
@BogdanM。你缩短它,发送一个 id,而不是一些完整的 url。这是一个需要解决/处理的不同问题,您无法避免 - 但并不难。
2021-04-02 21:41:47
你如何进行错误处理?例如,您将如何处理 .ashx 文件中抛出的异常?
2021-04-04 21:41:47