Avatar billede sbhansen Nybegynder
11. marts 2002 - 17:23 Der er 4 kommentarer og
1 løsning

hent image fra database og vis i browser

Er der én, der ligger inde med et eksempel på at hente et image, der er gemt i db (pt. access 2000) Jeg har kigget rundt omkring, bl.a. hos
ASP free http://www.aspfree.com/aspnet/downloadimage.aspx

men jeg synes ikke at beskrivelsen er så hamrende god...

Pt er billedet blot lagt som et objekt i db'en. Skal der være et felt til content_type?

Avatar billede sbhansen Nybegynder
12. marts 2002 - 22:20 #1
OK, der er ikke så mange kommentarer endnu - håber I bare grubler over det. Jeg har selv arbejdet lidt videre med problemstillingen. Her er dén kode, som jeg kan få til at upload'e billedet til en MS SQL db. Samt den kode som iflg. eksemplet skulle vise det i browseren. Men jeg får kun det velkendte røde kryds dér hvor billedet skulle vises, når jeg prøver at hente det:

Jeg har først lavet følgende tabel på SQL-db'en:
CREATE TABLE [dbo].[image] (
    [img_pk] [int] IDENTITY (1, 1) NOT NULL ,
    [img_name] [varchar] (50) NULL ,
    [img_data] [image] NULL ,
    [img_contenttype] [varchar] (50) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

ALTER TABLE [dbo].[image] WITH NOCHECK ADD
    CONSTRAINT [PK_image] PRIMARY KEY NONCLUSTERED
    (
        [img_pk]
    ) ON [PRIMARY]
GO
----------------------
Her er så filen imageupload.aspx:

<%@ Page Language="VB" EnableSessionState="False" EnableViewState="False" Trace="False" Debug="False" Strict="True" %>
<%@Import Namespace="System.Data" %>
<%@Import Namespace="System.Data.SqlClient" %>
<%@Import Namespace="System.IO"%>
<script language="VB" runat=server>

Sub UploadBtn_Click(Sender as Object, E as EventArgs)
Dim imgStream as Stream
Dim imgLen as Integer
Dim imgName_value as string
Dim imgContentType as String
Dim imgUploadedName as String

imgStream = UploadFile.PostedFile.InputStream
imgLen = UploadFile.PostedFile.ContentLength
imgUploadedName = UploadFile.PostedFile.FileName
Dim imgBinaryData(imgLen) as Byte
imgContentType = UploadFile.PostedFile.ContentType
imgName_value = imgName.Value

    Try
          If imgName_value.Length < 1 then
              imgName_value = GetLastRightOf("\",imgUploadedName )
        End if
        Catch myEx as Exception
              imgName_value = GetLastRightOf("\",imgUploadedName )
    End Try

Dim n as Integer = imgStream.Read(imgBinaryData, 0, imgLen)

Dim NumRowsAffected as Integer = MyDatabaseMethod(imgName_value, imgBinaryData, imgContentType)
        If NumRowsAffected > 0 then
              Response.Write ( "<BR> uploaded image " )
        Else
              Response.Write ( "<BR> an error occurred uploading the image.d " )
      End if

End Sub

Function GetLastRightOf(LookFor as String, myString as String) as String
    Dim StrPos as Integer
    StrPos = myString.LastIndexOf(LookFor)
    Return myString.SubString(StrPos + 1)
End Function


Function MyDatabaseMethod(imgName As String, imgbin As Byte(), imgcontenttype as String) As Integer
'Uses the System.Configuration class to extract the DSN from the root web.config file
        Dim connection As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("DSN"))
        Dim command as New SQLCommand( "INSERT INTO Image (img_name,img_data,img_contenttype) VALUES ( @img_name, @img_data,@img_contenttype )", connection )

        Dim param0 As New SQLParameter( "@img_name", SqldbType.VarChar,50 )
        param0.Value = imgName
        command.Parameters.Add( param0 )

        Dim param1 as New SQLParameter( "@img_data", SqldbType.Image )
        param1.Value = imgbin
        command.Parameters.Add( param1 )

        Dim param2 as New SQLParameter( "@img_contenttype", SqldbType.VarChar,50 )
        param2.Value = imgcontenttype
        command.Parameters.Add( param2 )

        connection.Open()
        Dim numRowsAffected as Integer = command.ExecuteNonQuery()
        connection.Close()

Return numRowsAffected

End Function

</script>
<html>
<title>Upload Images to a Database </title>
<body>
<form enctype="multipart/form-data" runat=server id=form1 name=form1>

Enter A Friendly Name for the image:
<input type=text id=imgName runat="server" />

<br>Select File To Upload:
<input id="UploadFile" type=file runat=server>
<asp:button Text="Upload Me!" OnClick="UploadBtn_Click" runat=server/>
</form>
</body>
</html>
---------------

jeg kontakter db'en via filen web.config:
<configuration>
    <appSettings>
            <add key="DSN" value="server=localhost;uid=sa;pwd=nothing;Database=northwind"/>
      </appSettings>
      <system.web>
            <customErrors mode="Off" />
      </system.web>
</configuration>
-----------------------
Ovenstående filer virker, og jeg kan upload'e billeder til tabellen image på min SQL-server
MEN...
Følgende virker IKKE:
Her er filen imgview.aspx:
<%@ Page Language="VB" EnableSessionState="False" EnableViewState="False" Trace="False" Debug="False" Strict="False" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script language="VB" runat="server">

Sub Page_Load(sender As Object, e As EventArgs)
        'Extract the ID out of the URL
        Dim imgid as String = Request.QueryString("id")
      'Uses the System.Configuration Class to extract DSN string from the web.config
      Dim myDSN As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("DSN"))
      Dim MyCommand As SqlCommand = New SqlCommand(sqlText, myDSN)

      myDSN.Open()

          Dim dr As SqlDataReader = MyCommand.ExecuteReader()
                If dr.Read()
                          Response.ContentType = (dr.Item(("img_contenttype")).ToString())
                          Response.BinaryWrite(dr.item("img_data"))
                End If
      myDSN.Close()
End Sub

</script>
<html><head></head>
<body>
<asp:textbox id="text1" runat=server />
</body>
</html>
-------------------
Jeg slutter med den store finale, hvor jeg i test-hml'en skulle se mit billede. Men det gør jeg IKKE:
Her er filen testimage.htm:
<html>
    <head>
        <title>Image Out of Database</title>
    </head>
    <body bgcolor="#FFFFFF">
        This image is from the database
        <BR>
        <img border="1" src="imgview.aspx?id=1">
    </body>
</html>

------------------
SÅ er der nogen, der vil prøve at få ovenstående til at virke, og evt fortælle mig, hvad der er forkert, så ville jeg blive super super glad. Det skal selvfølgelig ende med at alle knapper osv til alle sprog af min website ligger pænt og ordentligt i db'en, lige til at hente for den funktion, der skal generere hurtigt eksekverbare html-filer på basis af ASP.NET filerne. Tanken er altså, at jeg i første omgang skal have et meget dynamisk site - men som skal transformeres til flade html'filer i stor udstrækning, triggeret af forskellige events.

Håber på HJÆLP :-)
Avatar billede pcl Nybegynder
31. maj 2002 - 10:11 #2
istedet for den funktion der hedder GetLastRightOf, kan man bruge en .net metode.

'Gets the filenames contenttype in lower case
Dim strGetContentType As String = Path.GetExtension(imgUploadedName).ToLower()
Avatar billede pcl Nybegynder
31. maj 2002 - 10:13 #3
Og her er en der giver dig filnavnet uden extension:

'Gets the filename without extension
Dim strGetFileNameNoExt As String = Path.GetFileNameWithoutExtension(imgUploadedName)
Avatar billede sbhansen Nybegynder
25. juli 2002 - 14:02 #4
Jeg fik det aldrig til at virke. Heller ikke med kommentaren fra pcl.
Avatar billede pcl Nybegynder
19. september 2002 - 17:03 #5
Har du prøvet denne  http://www.123aspx.com/redir.aspx?res=28950

det virker fint herfra.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester