您的位置: 北碚信息网 > 娱乐

将智能的下载体验内置到Web应用程序中

发布时间:2019-09-13 20:32:50

本文将介绍以下内容:  从 ASP.NET 站点进行动态下载   生成即时链接   可恢复下载和自定义处理程序   自定义下载机制所涉及的安全性问题Downloading2006_09.exe

您的用户极有可能需要从贵组织的网站下载文件。既然提供下载和提供链接一样容易,您当然不需要去阅读有关此过程的文章,对吧?但随着 Web 领域的巨大进步,我们有很多理由可以相信,这个过程不一定像我们想像的那么容易。也许您希望将文件作为一个文件下载,而不是作为内容在浏览器中显示。也许您还不知道这些文件的路径(或者它们根本就不在磁盘上),因此那些简单的 HTML 链接不可能实现下载。也许您会担心用户在下载大文件期间会失去连接。

在本文中,我将介绍一些解决这些问题的方法,这样您的用户就可以拥有快速、无错的下载体验了。在整篇文章中,我将讨论动态生成的链接,说明如何绕过默认文件行为,并借用 HTTP 1.1 功能来例示可恢复的由 ASP.NET 驱动的下载。

基本下载链接

让我们首先来解决缺失链接的问题。如果您不知道某文件的路径将是什么,您只需稍后从数据库中拉出链接列表即可。您甚至可以通过在运行时于给定的目录中枚举文件来动态建立链接列表。这里我将探讨第二种方法。

假设我在 Visual Basic® 2005 中建立一个 DataGrid,并在其中填入指向下载目录中所有文件的链接,如图1 所示。要完成此操作,可先在页面内使用 Server.MapPath 来检索下载目录的完整路径(此例中为 ./downloadfiles/),再使用 DirectoryInfo.GetFiles 检索该目录中所有文件的列表,然后从 FileInfo 对象的最终所得数组建立一个 DataTable(其中含有代表每个相关属性的列)。可将 DataTable 绑定到页面上的 DataGrid,通过该 DataTable 可生成带有以下 HyperLinkColumn 定义的链接:

<asp:HyperLinkColumn DataNavigateUrlField="Name"

DataNavigateUrlFormatString="downloadfiles/{0}"

DataTextField="Name"

HeaderText="File Name:"

SortExpression="Name" />

如果您单击这些链接,就会发现浏览器对每个文件类型的处理方式都不同,具体取决于注册了哪些助手应用程序来打开每个文件类型。默认情况下,如果您单击 .asp 页面、.html 页面、.jpg、.gif 或 .txt,它会在浏览器其本身中打开,并且不出现“另存为”对话框。这是因为这些文件的扩展名都属于已知的 MIME 类型。因此,要么浏览器本身知道如何呈现文件,要么操作系统具有一个将被浏览器使用的助手应用程序。Webcasts(.wmv、.avi 等等)、PodCasts(.mp3 或 .wma)、PowerPoint® 文件以及所有的 Microsoft® Office 文档都属于已知的 MIME 类型,如果您不想在默认情况下联机打开这些文件,就产生了一个难题。

图 1 DataGrid 中简单的 HTML 链接

此外,如果您允许以此方式下载,则只有一个非常普通的访问控制机制可供您使用。您可以逐个目录地控制下载访问,但是逐一控制对各个文件或文件类型的访问需要详尽复杂的访问控制,这对于 Web 主管和系统管理员而言是一个非常麻烦的过程。幸运的是,ASP.NET 和 .NET Framework 提供了大量的解决方案。其中包括:

使用 Response.WriteFile 方法 使用 Response.BinaryWrite 方法流式传送文件 使用 ASP.NET 2.0 中的 Response.TransferFile 方法 使用 ISAPI 筛选器 写入到自定义浏览器控件……

血栓好治吗
宝宝健脾胃什么药好
宝宝咳嗽怎么办
小孩不消化吃什么食物
猜你会喜欢的
猜你会喜欢的