0

私は、ユーザーがサード パーティの Web サイトにあるビデオ (著作権なし) を表示することを選択できる Web サイトを持っています。ユーザーが選択した瞬間から、ユーザーがアクセスできるようになる前に、Web サーバーにダウンロードする必要があります。サードパーティの Web サイトでダウンロードを自動的に開始し、このパスで response.redirect を作成しようとしましたが、ユーザーがビデオを見ているときに、ビデオが 10 秒しかダウンロードされていない場合、プレーヤー/ブラウザはこのビデオを10 秒のビデオを再生し、10 秒後に停止します。

ファイルの代わりにストリームをリダイレクトするベストプラクティスは何ですか?

4

1 に答える 1

1

このコードはまさに私がやりたいことを実行していることがわかりました。サードパーティの Web サイトでファイルをダウンロードし、それをストリーミングすると、各チャンクが応答に書き込まれるため、元が完全にわかりにくくなります。したがって、あたかも所有しているかのように、任意の Web サイトから任意のファイルを提供できます。

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
于 2012-09-11T04:33:18.387 に答える