Hej!
Har en datagrid där jag vill skapa en knapp och när man klickar på den ska ett pdf dokument komma fram. Hade tänkt spara pdf filen i en mapp och spara sökvägen i databasen. Direkta sökvägen är C:\Inetpub\wwwroot\Test\pdf\festprogram.pdf och den fungerar om jag testar den i en browser. Så här ser koden ut
och jag får upp rätt i sökväg i datagriden men och det blir en länk men det händer inget när jag klickar. Hoppas ni förstår vad jag menar, är lite trött och kan nog var lite otydlig...
jag avskyr när pdf filer öppnas i broswern, jag ser mycket hellre att du stream:ar den till adobe istället.
Såhär har jag löst det du är ute efter fast med hjälpfiler.
Public Sub HelpDisplay(ByVal myFile As String)
Dim myDir As String = Server.MapPath("~/help/")
Dim oFileStream As FileStream
Dim lFileSize As Long, lStartpos = 0
' Read the file
Try
oFileStream = New FileStream(myDir & myFile, FileMode.Open)
Catch ex As FileNotFoundException
HttpContext.Current.Response.Clear()
CreateMessageAlert(Me, "Could not find the specific file.", "key1")
HttpContext.Current.Response.End()
Return
Catch Ex As Exception
HttpContext.Current.Response.Clear()
CreateMessageAlert(Me, "An error occured: " & Ex.Message, "key1")
HttpContext.Current.Response.End()
Return
End Try
' Get the size of the file
lFileSize = oFileStream.Length
Dim bBuffer(CInt(lFileSize)) As Byte
oFileStream.Read(bBuffer, 0, CType(lFileSize, Integer))
oFileStream.Close()
' Attach The stream to the browser.
With HttpContext.Current
.Response.ClearContent()
.Response.ContentType = "application/pdf"
.Response.AddHeader("content-disposition", "attachment; filename=" & myFile & "")
.Response.BinaryWrite(bBuffer)
.Response.End()
End With
End Sub
Funktionen HelpDisplay streamar ut innehållet, så den kan du inte lägga in i NavigateUrl. Där ska det vara en URL (Gäller för övrigt även ursprungsfelet. Det ska vara en URL, inte den absoluta filsökvägen).
Skapa en ny aspx som tar något ID (inte filnamnet) för filen som argument i querystring och anropa HelpDisplay i den, eller skapa en knapp i din grid som anropar funktionen.
Har skapat en pdf.aspx där jag anropar HelpDisplay (enl. Catz kod), men det fungerar inte.
Sen får jag felmed. på CreateMessageAlert vet inte vad den gör..Sen är jag osäker på om det blir rätt sökväg till mappen där jag har pdf-filerna, dom ligger i wwwroot/namn/pdf. Blir det rätt då att skriva (enl. kod ovan) Server.MapPath("~/namn/pdf/")?
Om någon skulle hjälpa mig skulle jag vara tacksam och gärna föklara koden hur den fungerar.
Testade först att lägga en response.write längst ner för att se om sökvägen stämde. Men då syndes ingenting, gjorde om det nu och la det så här:
Public Sub HelpDisplay(ByVal myFile As String)
Dim myDir As String = Server.MapPath("~/Autofox2/pdf/")
Dim oFileStream As FileStream
Dim lFileSize As Long, lStartpos = 0
[B]Response.Write(myDir)[/B]
Public Sub HelpDisplay(ByVal myFile As String)
Dim myDir As String = Server.MapPath("~/Autofox2/pdf/")
Dim oFileStream As FileStream
Dim lFileSize As Long, lStartpos = 0
' Read the file
Try
oFileStream = New FileStream(myDir & myFile, FileMode.Open)
Catch ex As FileNotFoundException
HttpContext.Current.Response.Clear()
Response.Write(myDir)
'CreateMessageAlert(Me, "Could not find the specific file.", "key1")
HttpContext.Current.Response.End()
Return
Catch Ex As Exception
HttpContext.Current.Response.Clear()
Response.Write(myDir)
' CreateMessageAlert(Me, "An error occured: " & Ex.Message, "key1")
HttpContext.Current.Response.End()
Return
End Try
' Get the size of the file
lFileSize = oFileStream.Length
Dim bBuffer(CInt(lFileSize)) As Byte
oFileStream.Read(bBuffer, 0, CType(lFileSize, Integer))
oFileStream.Close()
' Attach The stream to the browser.
With HttpContext.Current
.Response.ClearContent()
.Response.ContentType = "application/pdf"
.Response.AddHeader("content-disposition", "attachment; filename=" & myFile & "")
.Response.BinaryWrite(bBuffer)
.Response.End()
End With
End Sub
Usch nu mår jag dåligt, inte likt mig att posta något och inte följa upp. Måste glömt lägga in den i bevakning ursäkta så mycket men nu ska jag försöka hjälpa till lite.
Public Sub HelpDisplay(ByVal sender As Object, ByVal e As CommandEventArgs)
Dim myDir As String = Server.MapPath("~/Autofox2/pdf/")
Dim oFileStream As FileStream
Dim lFileSize As Long, lStartpos = 0
Dim myFile As String = e.CommandArgument
' Read the file
Try
oFileStream = New FileStream(myDir & myFile, FileMode.Open)
Catch ex As FileNotFoundException
HttpContext.Current.Response.Clear()
Response.Write(myDir)
'CreateMessageAlert(Me, "Could not find the specific file.", "key1")
HttpContext.Current.Response.End()
Return
Catch Ex As Exception
HttpContext.Current.Response.Clear()
Response.Write(myDir)
' CreateMessageAlert(Me, "An error occured: " & Ex.Message, "key1")
HttpContext.Current.Response.End()
Return
End Try
' Get the size of the file
lFileSize = oFileStream.Length
Dim bBuffer(CInt(lFileSize)) As Byte
oFileStream.Read(bBuffer, 0, CType(lFileSize, Integer))
oFileStream.Close()
' Attach The stream to the browser.
With HttpContext.Current
.Response.ClearContent()
.Response.ContentType = "application/pdf"
.Response.AddHeader("content-disposition", "attachment; filename=" & myFile & "")
.Response.BinaryWrite(bBuffer)
.Response.End()
End With
End Sub
Det är helt otestat men du kan i alla fall använda dig av commanname och commandargument, detta förutsätter iofs att du anger filnamnet som argument och inte något id.
Du behöver absolut inte be om ursäkt det är jag som ska tacka, ska titta på det sen. Operade halsmandlarna igår och är lite sliten, skriver tillbaka så fort jag har testat....