Frage

Ich habe meinen Kopf gegen die Wand mit diesem seltsamen Verhalten auf Chrome worden hämmern

Ich habe Dateien verschlüsselt auf der Festplatte in einem ungenannten, ungeordneten Zustand gespeichert. wenn die Dateien vom Benutzer heruntergeladen werden, wird der Kunde zu einem Download-Handler (.ashx) umgeleitet wird, die Daten in einen Strom geladen, entschlüsselt und an den Client gesendet. Nun hat das funktioniert bis vor kurzem in Ordnung,

Es funktioniert auf allen Browsern außer Chrom, wo die Datei als gz-Datei heruntergeladen und ist nicht lesbar?

Ich habe der Kürze der Strom-fetching und Kryptographie Teile gezupft (bedenken Sie dies funktioniert perfekt in IE, Firefox etc.)

    Private Function StreamFile(ByVal context As System.Web.HttpContext) As Boolean

    context.Response.Clear()
    context.Response.ClearHeaders()
    context.Response.BufferOutput = False
    context.Response.ContentType = "application/octet-stream"
    context.Response.AddHeader("content-disposition", "attachment;filename=""" & _sFileName & """")
    context.Response.AddHeader("content-length", _iSize)
    context.Response.Cache.SetNoServerCaching()
    context.Response.Cache.SetMaxAge(System.TimeSpan.Zero)

    Dim oInputStream As System.IO.Stream = GetStream()
    Dim oBufferedStream As New BufferedStream(oFileStream, context.Response.OutputStream)
    oBufferedStream.ProcessStreams(True)

    context.ApplicationInstance.CompleteRequest()

    Return True

End Function

Public Class BufferedStream
    Private _oInputStream As Stream
    Private _oOutputStream As Stream
    Private _bBuffer() As Byte
    Public Const DEFAULT_BUFFER_SIZE As Integer = 8192

    Public Sub New(ByRef oInputStream As Stream, ByRef oOutputStream As Stream)
        _oInputStream = oInputStream
        _oOutputStream = oOutputStream
        _bBuffer = GetStreamBuffer(ToInteger(_oInputStream.Length))
    End Sub

    Public Function ProcessStreams(ByVal bCloseStreams As Boolean) As Boolean

        Dim iRead As Integer = 0
        Dim iStreamLength As Integer = ToInteger(_oInputStream.Length)

        Try
            iRead = _oInputStream.Read(_bBuffer, 0, _bBuffer.Length)
            While iRead > 0
                _oOutputStream.Write(_bBuffer, 0, _bBuffer.Length)
                iRead = _oInputStream.Read(_bBuffer, 0, _bBuffer.Length)
                If iRead < _bBuffer.Length Then System.Array.Resize(_bBuffer, iRead)
            End While

            If bCloseStreams Then
                Close()
            End If
            Return True

        Catch
            Return False
        End Try
    End Function

    Public Shared Function GetStreamBuffer(ByVal iStreamSize As Integer) As Byte()
        Dim iBufferSize As Integer = iStreamSize - 1
        If iBufferSize > DEFAULT_BUFFER_SIZE Then iBufferSize = DEFAULT_BUFFER_SIZE
        Dim bBuffer As Byte() = New Byte(iBufferSize) {}
        Return bBuffer
    End Function

End Class

Jede Hilfe wäre sehr geschätzt.

Hier sind die HTTP-Header von Fiedler, wenn die Datei in Chrom heruntergeladen

HTTP/1.1 200 OK
Date: Fri, 30 Oct 2009 00:01:45 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
content-disposition: attachment;filename="codeKiwi.txt"
Content-Length: 349
Cache-Control: private, max-age=0
Content-Type: application/octet-stream

Beachten Sie, dass der Dateiname codekiwi.txt und der Inhalt sind einige einfache Klartext, wird die Datei als codekiwi.txt.gz gespeichert und enthält Kauderwelsch.

War es hilfreich?

Lösung

Ok, löste es mich. Ich stellte sich heraus, dass Chrome (und Firefox) wirklich nicht, wie die Response.ClearHeaders nennen, aus irgendeinem Grund IE mit dieser war in Ordnung, wenn ich es entfernt die Downloads wie erwartet funktioniert wieder ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top