我需要前言我根本不是.NET编码器,但为了获得部分功能,我修改了一个technet chunkedfilefetch.aspx脚本,该脚本使用分块数据读取和写入文件传输的流式方法,让我得到一半三通。
iStream = New System.IO.FileStream(path, System.IO.FileMode.Open, _
IO.FileAccess.Read, IO.FileShare.Read)
dataToRead = iStream.Length
Response.ContentType = "application/octet-stream"
Response.AddHeader("Content-Length", file.Length.ToString())
Response.AddHeader("Content-Disposition", "attachment; filename=" & filedownload)
' Read and send the file 16,000 bytes at a time. '
While dataToRead > 0
If Response.IsClientConnected Then
length = iStream.Read(buffer, 0, 16000)
Response.OutputStream.Write(buffer, 0, length)
Response.Flush()
ReDim buffer(16000) ' Clear the buffer '
dataToRead = dataToRead - length
Else
' Prevent infinite loop if user disconnects '
dataToRead = -1
End If
End While
这适用于高达2GB的文件,现在功能正常。但只有一个问题,它不允许恢复。
我将原始代码称为fetch.aspx并通过URL传递orderNUM。 fetch.aspx& ordernum = xxxxxxx然后根据ordernumber从数据库中读取文件名/位置,并将其从不在webroot下的安全位置中分块出来。
我需要一种方法来使这种可恢复,由于互联网和大文件的性质,人们总是断开连接,并希望从他们中断的地方恢复。但是我读过的任何可恢复的文章都假设该文件在webroot中...即。 http://www.devx.com/dotnet/Article/22533/1954好文章并且运作良好,但我需要从安全的位置流式传输。
我根本不是.NET编码器,至多我可以做一些冷却,如果有人可以帮我修改处理程序来做这件事,我真的很感激。
要求:
如果有办法请求包含etag的初始HTTP请求标头,接受范围到正常的.ASPX文件,我可以读取这些值,如果存在accept-range和etag,则开始分块字节值不知怎的?但我找不到传输http请求标头的方法,因为它们似乎在IIS级别丢失了。
在URL字符串中传递的OrderNum是唯一的,可以用作ETag
Response.AddHeader("ETag", request("ordernum"))
文件需要根据尺寸进行恢复和分块。
任何帮助都会非常感激,我一直在阅读,阅读和下载代码,但是没有一个示例符合我的情况,原始文件是从webroot外部流式传输的。请帮助我掌握这些httphandlers:)