从服务器下载文件的最佳方法是啥

Posted

技术标签:

【中文标题】从服务器下载文件的最佳方法是啥【英文标题】:What is the best way to download file from server从服务器下载文件的最佳方法是什么 【发布时间】:2012-06-10 08:20:44 【问题描述】:

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

从服务器下载文件的最佳方法是什么?我应该使用诸如here 描述的WCF 服务还是this one 之类的简单页面?

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

【问题讨论】:

我认为这与这个问题/答案有关:***.com/questions/3749231/… 【参考方案1】:

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

假设您在download.ashx 有要下载的文件,并且您有一些参数要从您的javascript 传递,例如download.ashx?p1=8827&p2=8831 以了解您要创建的内容。

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

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

或者您可以使用window.open 做同样的想法

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

您的文件将开始下载。

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

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

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

您也可能对这个答案感兴趣:How to handle errors。

【讨论】:

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

以上是关于从服务器下载文件的最佳方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

下载 WCF 服务公开的所有 WSDL 文件的最佳方法是啥?

在android中从网络下载图像数据的最佳方法是啥

使用 .Net 对 zip 文件进行数字签名以供下载的最佳方式是啥

从 Xamarin ios 中的 url 下载图像的最佳方法是啥?

从 url 列表中下载 <very large> 页面的最佳方法是啥?

在 Java 1.5 中,将文件从客户端传输到服务器的最佳方法是啥?