2012-09-09 7 views
0

타사 웹 사이트에있는 비디오 (저작권 없음)를 볼 수있는 웹 사이트가 있습니다. 사용자가 선택한 순간부터 사용자가 액세스하려면 먼저 웹 서버에 다운로드해야합니다. 제 3 자 웹 사이트에서 자동으로 다운로드를 시작하고이 경로로 response.redirect를 만들려고했지만 사용자가 동영상을 시청할 때 동영상의 다운로드가 10 초 밖에되지 않는 경우 플레이어/브라우저는이 동영상을 10 초 동영상을 재생하고 10 초 후에 멈 춥니 다.Response.Redirect 다운로드 진행 중

파일 대신 스트림을 리디렉션하는 것이 가장 좋은 방법은 무엇입니까?

+1

나는 가장 좋은 방법은 기존 플래시 플레이어에서 맞춤 코드를 만들고 추가 코드로 계속해서 플레이하는 것이라고 생각합니다. 소리가 좀 어렵고 어쩌면 어쩌면. – Aristos

+0

예. 전달 함수를 "저수준 소켓"알고리즘으로 변경하는 것은 다른 플랫폼에서 맞춤 클라이언트를 코딩하는 데 어려움을 겪을 다른 코더와 작업하고 있기 때문에 피하고 싶습니다. 그러나 현재 다른 선택의 여지가없는 것 같습니다. . –

+0

@Aristos에 관심이 있으시면 서버 B에서 서버 A로 다운로드하고 동시에 클라이언트에 보내는 방법을 찾았습니다. –

답변

1

이 코드는 내가 원하는 것을 정확하게 수행하고 있습니다. 제 3 자 웹 사이트에서 파일을 다운로드하고 스트리밍 할 때 각 청크가 응답에 기록되어 원본을 완전히 obsfuscate합니다. 따라서, 내가 소유하고있는 것처럼 모든 웹 사이트의 파일을 제공 할 수 있습니다.

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 
+0

지금은 흥미롭지는 않지만 해결책은 +1입니다. – Aristos