Response.Redirect正在进行下载

时间:2012-09-09 13:07:58

标签: asp.net response.redirect

我有一个网站,用户可以选择观看第三方网站上的视频(无版权)。从用户选择它的那一刻起,它需要在用户可以访问之前下载到我的Web服务器上。我尝试在第三方网站上自动开始下载并使用此路径进行response.redirect,但是当用户正在观看视频时,如果视频只下载了10秒,则任何播放器/浏览器都会将此视频视为十秒钟的视频,10秒后停止播放。

重定向流而不是文件的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

我发现这段代码完全符合我的要求。它在第三方网站上下载文件,并且当它正在流式传输时,每个块都在响应中写入,以便它完全模糊原点。因此,可以从任何网站提供任何文件,就好像我拥有它一样。

Private Sub SendFile(ByVal url As String)
    Dim stream As System.IO.Stream = Nothing
    Dim bytesToRead As Integer = 10000
    Dim buffer() As Byte = New Byte((bytesToRead) - 1) {}

    Try

        Dim fileReq As System.Net.WebRequest = CType(System.Net.HttpWebRequest.Create(url), System.Net.HttpWebRequest)
        Dim fileResp As System.Net.HttpWebResponse = CType(fileReq.GetResponse, System.Net.HttpWebResponse)
        If (fileReq.ContentLength > 0) Then
            fileResp.ContentLength = fileReq.ContentLength
        End If
        stream = fileResp.GetResponseStream
        Dim resp As System.Web.HttpResponse = HttpContext.Current.Response
        resp.ContentType = "application/octet-stream"
        resp.AddHeader("Content-Disposition", ("attachment; filename=\""" + ("mp3" + "\""")))
        resp.AddHeader("Content-Length", fileResp.ContentLength.ToString)
        Dim length As Integer = 1000000
        While (length > 0)
            If resp.IsClientConnected Then
                length = stream.Read(buffer, 0, bytesToRead)
                resp.OutputStream.Write(buffer, 0, length)
                resp.Flush()
                buffer = New Byte((bytesToRead) - 1) {}
            Else
                length = -1
            End If        
        End While
    Catch
        stream.Close()
    Finally
        If (Not (stream) Is Nothing) Then
            stream.Close()
        End If
    End Try
    Response.End()
End Sub