科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件将智能的下载体验内置到Web应用程序中

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

随着 Web 领域的巨大进步,我们有很多理由可以相信,这个过程不一定像我们想像的那么容易。

作者:MSDN 来源:IT专家网 2008年4月26日

关键字: 程序 应用 web net Windows

  • 评论
  • 分享微博
  • 分享邮件
本文将介绍以下内容:
  •   从 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 筛选器
  • 写入到自定义浏览器控件

……

    • 评论
    • 分享微博
    • 分享邮件
    闂傚倸鍊搁崐椋庢閿熺姴鐭楅幖娣妼缁愭鏌¢崶鈺佷汗闁哄閰i弻鏇$疀鐎n亞浠炬繝娈垮灠閵堟悂寮婚弴锛勭杸閻庯綆浜栭崑鎾诲冀椤撱劎绋忛梺璺ㄥ櫐閹凤拷

    濠电姷鏁告慨鐑姐€傛禒瀣劦妞ゆ巻鍋撻柛鐔锋健閸┾偓妞ゆ巻鍋撶紓宥咃躬楠炲啫螣鐠囪尙绐為梺褰掑亰閸撴盯鎮惧ú顏呪拺闂傚牊鍗曢崼銉ョ柧婵犲﹤瀚崣蹇旂節婵犲倻澧涢柛瀣ㄥ妽閵囧嫰寮介妸褋鈧帡鏌熼挊澶婃殻闁哄瞼鍠栭幃婊堝煛閸屾稓褰嬮柣搴ゎ潐濞叉ê鐣濈粙璺ㄦ殾闁割偅娲栭悡娑㈡煕鐏炲墽鐭嬫繛鍫熸倐濮婄粯鎷呯粵瀣異闂佹悶鍔嬮崡鍐茬暦閵忋倕鍐€妞ゆ劑鍎卞皬闂備焦瀵х粙鎴犫偓姘煎弮瀹曚即宕卞Ο闀愮盎闂侀潧鐗嗛幊搴㈡叏椤掆偓閳规垿鍩ラ崱妞剧凹濠电姰鍨洪敋閾荤偞淇婇妶鍛櫤闁稿鍊圭换娑㈠幢濡纰嶉柣搴㈣壘椤︾敻寮诲鍫闂佸憡鎸鹃崰搴敋閿濆鏁嗗〒姘功閻绻涢幘鏉戠劰闁稿鎹囬弻锝呪槈濞嗘劕纾抽梺鍝勬湰缁嬫垿鍩為幋锕€宸濇い鏇炴噺閳诲﹦绱撻崒娆戝妽妞ゃ劌鎳橀幆宀勫磼閻愰潧绁﹂柟鍏肩暘閸斿矂鎮為崹顐犱簻闁圭儤鍨甸鈺呮倵濮橆剦妲归柕鍥у瀵粙濡歌閸c儳绱撴担绛嬪殭婵☆偅绻堝濠氭偄绾拌鲸鏅i悷婊冪Ч閹﹢鎳犻鍌滐紲闁哄鐗勯崝搴g不閻愮儤鐓涢悘鐐跺Г閸犳﹢鏌℃担鐟板鐎规洜鍠栭、姗€鎮╅搹顐ら拻闂傚倷娴囧畷鍨叏閹惰姤鈷旂€广儱顦崹鍌炴煢濡尨绱氶柨婵嗩槸缁€瀣亜閺嶃劎鈽夋繛鍫熺矒濮婅櫣娑甸崨顔俱€愬銈庡亝濞茬喖宕洪埀顒併亜閹哄棗浜鹃梺鎸庢穿婵″洤危閹版澘绫嶉柛顐g箘椤撴椽姊虹紒妯哄鐎殿噮鍓欒灃闁告侗鍠氶崢鎼佹⒑閸撴彃浜介柛瀣閹﹢鏁冮崒娑氬幈闁诲函缍嗛崑鍡樻櫠椤掑倻纾奸柛灞剧☉缁椦囨煙閻熸澘顏柟鐓庢贡閹叉挳宕熼棃娑欐珡闂傚倸鍊风粈渚€骞栭銈傚亾濮樺崬鍘寸€规洖缍婇弻鍡楊吋閸涱垽绱遍柣搴$畭閸庨亶藝娴兼潙纾跨€广儱顦伴悡鏇㈡煛閸ャ儱濡煎褜鍨伴湁闁绘ǹ绉鍫熺畳闂備焦瀵х换鍌毼涘Δ鍛厺闁哄洢鍨洪悡鍐喐濠婂牆绀堟慨妯挎硾閽冪喖鏌曟繛褍瀚烽崑銊╂⒑缂佹ê濮囨い鏇ㄥ弮閸┿垽寮撮姀鈥斥偓鐢告煥濠靛棗鈧懓鈻嶉崶銊d簻闊洦绋愰幉楣冩煛鐏炵偓绀嬬€规洟浜堕、姗€鎮㈡總澶夌处

    重磅专题
    往期文章
    最新文章