对于下载方面的站点来说,怎样去实现防盗下,隐藏下载地址一直是一个关键的问题,现在就来讲一下.此法适合在.NET下使用,ASP是不行的.虽然晓鹏尝试了用这种原理来实现ASP的过程,不过好像没什么效果,还是死在那,也许这就是ASP不如.NET的地方吧.

原因:
Web 服务器计算机的硬件配置决定您可以成功下载的最大文件大小。当 ASP.NET 辅助进程(Aspnet_wp.exe,对于在 Internet 信息服务 6.0 [IIS] 上运行的应用程序,则为 W3wp.exe)执行文件下载请求时,会出现文件下载对话框。ASP.NET 辅助进程开始向 Microsoft Internet 信息服务进程(Inetinfo.exe 或 Dllhost.exe)发送数据。它不等您单击"确定"即开始发送。

根据计算机的配置,IIS 进程可能会处理数据,也可能会将数据缓存在内存中。如果文件太大,在这两个进程相互通信的过程中,数据将被缓存在内存中。这可能会导致服务器上的内存使用量增加。出现此错误的原因是 Web 服务器上的内存限制。

 解决方法:
要解决此问题,请使用以下任一方法:

* 将数据分成较小的部分,然后将其移动到输出流以供下载,从而获取这些数据。以下代码演示了如何完成此操作。

重要说明:当您在 ASP.NET 应用程序的 Web.config 文件中将编译元素的 debug 属性值设置为 false 时,必须针对要下载的文件大小将 Server.ScriptTimeout 属性设置为适当的值。默认情况下,Server.ScriptTimeout 值被设置为 90 秒。但是,当 debug 属性被设置为 true 时,Server.ScriptTimeout 值将被设置为一个非常大的值(30,000,000 秒)。作为一名开发人员,您必须知道这可能会对您的 ASP.NET Web 应用程序的行为造成的影响。

此外,在下面的代码中,您还必须知道与 FileStream 构造函数一起使用的参数值。指定的枚举值会对提供的功能产生重大影响。有关更多信息,请参考 参考 一节中的 FileStream 链接。
Visual Basic .NET 代码

Dim iStream As System.IO.Stream

' Buffer to read 10K bytes in chunk:
Dim buffer(10000) As Byte

' Length of the file:
Dim length As Integer

' Total bytes to read:
Dim dataToRead As Long

' Identify the file to download including its path.
Dim filepath As String = "DownloadFileName"

' Identify the file name.
Dim filename As String = System.IO.Path.GetFileName(filepath)

Try
' Open the file.
iStream = New System.IO.FileStream(filepath, System.IO.FileMode.Open, _
IO.FileAccess.Read, IO.FileShare.Read)

' Total bytes to read:
dataToRead = iStream.Length

Response.ContentType = "application/octet-stream"
Response.AddHeader("Content-Disposition", "attachment; filename=" & filename)

' Read the bytes.
While dataToRead > 0
' Verify that the client is connected.
If Response.IsClientConnected Then
' Read the data in buffer
length = iStream.Read(buffer, 0, 10000)

' Write the data to the current output stream.
Response.OutputStream.Write(buffer, 0, length)

' Flush the data to the HTML output.
Response.Flush()

Read the rest of this entry