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.aspxmen 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?
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 :-)