如何从安全位置创建大型可恢复下载.NET

如何从安全位置创建大型可恢复下载.NET,.net,large-files,security,chunked,resume-download,.net,Large Files,Security,Chunked,Resume Download,我需要说明的是,我根本不是.NET编码器,但为了获得部分功能,我修改了technet chunkedfilefetch.aspx脚本,该脚本使用分块数据读取和写入流式文件传输方法,让我半途而废 iStream = New System.IO.FileStream(path, System.IO.FileMode.Open, _ IO.FileAccess.Read, IO.FileShare.Read) dataToRead = iStream.Length Response.Cont

我需要说明的是,我根本不是.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中。。伟大的文章和作品很好,但我需要从一个安全的位置流

我根本不是一个.NET程序员,充其量我可以做一点coldfusion,如果有人能帮我修改一个处理程序来实现这一点,我将非常感激

要求:

我有一个运行良好的fetch.aspx脚本,它使用上述代码片段作为流式下载的基础。 下载文件的大小为600MB,存储在webroot之外的安全位置。 用户单击fetch.aspx开始下载,因此如果下载失败,将再次单击它。如果ext是.ASPX,并且发送的文件是AVI,那么单击它将完全绕过映射到.AVI ext的IHTTP处理程序,因此这让我感到困惑 据我所知,浏览器将读取并匹配etag值和文件修改日期,以确定它们谈论的是同一个文件,然后在浏览器和IIS之间交换后续接受范围。由于此对话框发生在IIS上,因此我们需要使用处理程序进行拦截并相应地作出响应,但单击链接会将其发送到一个ASPX文件,该文件需要位于AVI文件上。。也让我困惑。 如果有一种方法可以将包含etag、accept range的初始HTTP请求头请求到normal.ASPX文件中,我就可以读取这些值,如果accept range和etag存在,就以某种方式在该字节值处开始分块?但是我找不到传输http请求头的方法,因为它们似乎在IIS级别丢失了

在URL字符串中传递的OrderNum是唯一的,可以用作ETag

    Response.AddHeader("ETag", request("ordernum"))
由于大小的原因,文件需要恢复和分块

文件扩展名为.AVI,因此可以围绕它编写处理程序。 IIS 6.0 Web服务器 非常感谢您的帮助,我一直在阅读和下载代码,但给出的示例中没有一个符合我的情况,因为原始文件是从webroot外部流式传输的。请帮助我处理这些HttpHandler: