0

I have an asp.net application which allows user to download PDF files. but instead of downloading it, the browser opens the file with unreadable block characters.

Download Code

Protected Sub btn_dwnd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_dwnd.Click
    cn.Open()

    cmd.CommandText = "Select * from Syllabus where file_name ='" & txtdwd_file.Text & "'"
    cmd.Connection = cn
    dr = cmd.ExecuteReader
    Do While dr.Read
        Response.WriteFile(dr("file_name"))

    Loop
    cn.Close()
End Sub

I am trying to download my uploaded pdf file in my project's root directory D:\OLMS when I click download unreable characters opens up in browser (square characters). I think it opens up pfd file in browser

Upload Code

Protected Sub btnadd_sylbus_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnadd_sylbus.Click
    Dim extension As String = System.IO.Path.GetExtension(FileUpload_sylbus.PostedFile.FileName).ToLower()
    Dim Type As String = Nothing
    If (extension = ".pdf") Then
        Dim strFileNamePath As String
        Dim strFileNameOnly As String
        strFileNamePath = FileUpload_sylbus.PostedFile.FileName
        strFileNameOnly = Path.GetFileName(strFileNamePath)
        Dim newFileNamePath As String = Path.Combine("D:\OLMS", strFileNameOnly)
        Dim br As New BinaryReader(FileUpload_sylbus.PostedFile.InputStream)
        FileUpload_sylbus.PostedFile.SaveAs(newFileNamePath)
        cmd.CommandText = "INSERT into Syllabus(sylbus_id, sylbus_name, file_name, content) values(@id,@name,@file,@cont)"
        cmd.Connection = cn
        cmd.Parameters.Add("@id", txtsylbus_id.Text)
        cmd.Parameters.Add("@name", txtsylbus_name.Text)
        cmd.Parameters.Add("@file", FileUpload_sylbus.FileName)
        cmd.Parameters.Add("@cont", br.ReadBytes(FileUpload_sylbus.PostedFile.ContentLength))
        cmd.ExecuteNonQuery()
        cn.Close()
        lbladd_sylbus.Visible = True
        lbladd_sylbus.Text = "File Upload Success."
        txtsylbus_id.Text = Nothing
        txtsylbus_name.Text = Nothing
    Else
        lbladd_sylbus.Visible = True
        lbladd_sylbus.Text = "Not a Valid file format"
    End If
End Sub
Pilgerstorfer Franz
  • 8,303
  • 3
  • 41
  • 54
Karan
  • 7
  • 1
  • You have to send the response after you write it, otherwise it's going to send the rest of the page contents and the file will be corrupt. Also, you should set the content type before you write to the response. – mason Mar 05 '15 at 20:02
  • I would recommend first *clearing your response*, then *writing your file to the output stream*. For this have a look at this [similar SO question](http://stackoverflow.com/questions/1072814/c-sharp-asp-net-write-file-to-client). – Pilgerstorfer Franz Mar 05 '15 at 20:03
  • 1
    You've got to stream the PDF out of the database field. Look up how to read BLOB and CLOB data. – Tim Mar 05 '15 at 20:03

1 Answers1

0

Thanx guys it worked :D

        Response.ClearHeaders()
        Response.ClearContent()
        Response.ContentType = "application/octet-stream"
        Response.Charset = "UTF-8"
        Response.AddHeader("content-disposition", "attachment; filename=" & dr("file_name"))
        Response.WriteFile("D:\OLMS\" & dr("file_name"))
        Response.End()
Karan
  • 7
  • 1