2011-02-28 168 views
0


我已经在asp.net web论坛上发布了这个问题,但没有人回复。无法在IE8中打开.pdf文件

使用IE8我无法打开pdf文件的“ONE”页面,并给我一个错误消息“的文件已损坏,无法修复”从SQL Server 2008多个检索时,但页面我可以打开没有问题。

使用Chrome我可以打开任意数量的.pdf页面。

使用IE8从DB打开的同一页,可以直接从使用IE8的硬盘打开。

我在.asxh文件代码:

context.Response.ContentType = "application/pdf" 
    Dim strm As Stream = ShowNewsImage(imgName) 
    If Not strm Is Nothing Then 
     Dim buffer As Byte() = New Byte(4095) {} 
     Dim byteSeq As Integer = strm.Read(Buffer, 0, 4096) 

     Do While byteSeq > 0 
      context.Response.OutputStream.Write(buffer, 0, byteSeq) 
      byteSeq = strm.Read(Buffer, 0, 4096) 
     Loop 
     context.Response.BinaryWrite(buffer) 
    End If 

感谢,

艾哈迈德。

+0

以块为单位编写文件的任何原因? – 2011-02-28 11:35:31

回答

0

问题解决了。

我改变了缓冲区从对象到字节,它的工作!

旧代码(一个处理程序的一部分):

context.Response.ContentType = "application/pdf" 
    Dim strm As Stream = ShowNewsImage(imgName) 
    If Not strm Is Nothing Then 
     Dim buffer As Byte() = New Byte(4095) {} 
     Dim byteSeq As Integer = strm.Read(buffer, 0, 4096) 

     Do While byteSeq > 0 
      context.Response.OutputStream.Write(buffer, 0, byteSeq) 
      byteSeq = strm.Read(buffer, 0, 4096) 
     Loop 
     context.Response.BinaryWrite(buffer) 
     context.Response.End() 
    End If 
End Sub 

Public Function ShowNewsImage(ByVal imgName As String) As Stream 
    Dim conn As String = ConfigurationManager.ConnectionStrings("Connection").ConnectionString 
    Dim connection As SqlConnection = New SqlConnection(conn) 
    Dim sql As String = "SELECT image FROM Table WHERE ID = @ID" 
    Dim cmd As SqlCommand = New SqlCommand(sql, connection) 
    cmd.CommandType = CommandType.Text 
    cmd.Parameters.AddWithValue("@ID", imgName) 
    connection.Open() 
    Dim img As <strong>Object </strong>= cmd.ExecuteScalar() 
    Try 
     Return New MemoryStream(CType(img, Byte())) 
    Catch 
     Return Nothing 
    Finally 
     connection.Close() 
    End Try 
End Function 

正如所看到的,的ExecuteScalar()附接在输出到对象。 我改变了这种以字节:

context.Response.ContentType = "application/pdf" 
    Dim buffer As Byte() = New Byte(4095) {} 
    Dim byteSeq As Integer = 0 
    Dim conn As String = ConfigurationManager.ConnectionStrings("Connection").ConnectionString 
    Dim connection As SqlConnection = New SqlConnection(conn) 
    Dim sql As String = "SELECT image FROM Table WHERE ID = @ID" 
    Dim cmd As SqlCommand = New SqlCommand(sql, connection) 
    cmd.CommandType = CommandType.Text 
    cmd.Parameters.AddWithValue("@ID", imgName) 
    connection.Open() 

    buffer = cmd.ExecuteScalar() 

    context.Response.BinaryWrite(buffer) 
    context.Response.End() 

无需context.Response.OutputStream.Write,它已经在context.Response.BinaryWrite

阻碍花了两天时间。

0

完成PDF后将Response.buffer设置为true并响应.flush。

+0

谢谢VSU,我试过了,但给了我损坏的文件和一条消息“文件已损坏,无法修复” – Ahmed 2011-02-28 05:44:25

0

似乎太明显了,但我必须问......你尝试过吗?

Response.WriteFile(imgName) 

Link to documentation万一你不熟悉这个。 :)

+0

感谢Shadow Wizard的回复 – Ahmed 2011-03-04 20:28:54