Just nu i M3-nätverket
Gå till innehåll
Simon Johansson

Lagra bilder i SQL

Rekommendera Poster

Simon Johansson

Hur ska man på ett smidigt sätt med ASP få en bild som ligger på en webbserver att lagras i en SQL-databas, och sedan kunna visas?

 

/s

 

 

========================================

Simon Johansson

Redaktör för Eforum

Simon.Johansson@idg.se

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Olle Nyrén

Enklast är att lagra bilden på webservern och endast lagra en länk till bilden i databasen.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mr Andersson

Jag brukar bara lagra sökväg och filnamn, inte hela bilden.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Olle Nyrén

Ja, eller så kan man lagra en länk till bilden :)

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Simon Johansson

 

Enklast är att lagra bilden på webservern och endast lagra en länk till bilden i databasen.

 

Well, it's för enkelt för mig.

 

Nejdå, men jag ska prompt ha in bilden i en databas.

 

Såhär:

 

Jag har en bild som heter typ image.jpg, som ligger på webbservern. Det är till en webbkamera, så jag har i dag en Iframe som uppdateras varannan sekund, men nu vill jag att den istället laddas upp i en databas och visas varannan sekund...

 

Onödigt? Kanske, men så ska jag ha det i alla fall... ;)

 

/s

 

========================================

Simon Johansson

Redaktör för Eforum

Simon.Johansson@idg.se

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Steve

Enklast är väl att göra som grabbarna säger och lagra bildnamnet eller som länk, och ladda upp bilden till en image-mapp på servern istället??

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Simon Johansson

 

Äh. Nu har jag bestämt mig. Och jag är jävligt envis. :)

 

Nej, men allvarligt talat. Jag vet mycket väl att jag kan lagra URL:en bara, men så skall icke ske, ty omständigheterna kräva denna lösning.

 

Så hjälp mig nu!

 

Jag vet inte om det fungerar, men jag vill ha egentligen typ såhär (det här är ingen riktig kod, utan bara för att visa er):

 

I iframen image.asp:

 

<meta refresh=image.asp 2sec>

<asp-kod som tar bilden image.jpg och lägger upp i en sqldatabas som blob>

<img src=fil.asp som i sin tur plockar ur blobben från databasen>

 

Capisce?

 

/s

 

 

========================================

Simon Johansson

Redaktör för Eforum

Simon.Johansson@idg.se

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Simon Johansson

 

Alltså vi har lastbalanserade servrar, så filerna måste replikeras ut, laddar man upp bilden till en server syns den inte på alla andra innan man replikerar.

 

Därför MÅSTE bilden lagras i en databas för att man ska kunna ha en frekvens på en bild varannan sekund.

 

/s

 

========================================

Simon Johansson

Redaktör för Eforum

Simon.Johansson@idg.se

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Bj0rN

Det är inga problem att lagra bilder i databaser. Det du kan göra för att vara säker på att datat inte går förlorat är att base64 encoda datat innan du lägger in det.

 

Det finns komponenter som fixar både uppladdning av filer och komponenter som tar hand om base64.

 

-Bj

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Anp

Fast då blir den väl 20-30% större eller?

 

/A

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
johan pålsson

Hej !

 

Du behöver inte lägga filen i en databas bara för det, lägg filerna i en mapp på en gemensam filhanterare och dela ut den till alla webservrar.

 

Det kanske inte spelar så stor roll i det här fallet (liten jpg-fil) men ju större filer man vill spara, desto sämre verkar det att vara att ersätta filhanteraren med SQL-server ur prestandasynpunkt.

 

/Johan

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
PJL

Jag tror tyvärr att det är svärt att lösa det hela direkt från ASP efter som du bara kan avända datatypen variant. Jag har gjort en motsvarande lösning med då använde jag en COM-komponent på webbservern. (Egentligen är det flera komponenter i olika lager men det spelar ingen roll för principen är den samma)

 

För att läsa upp en bild:

---

dim cn as new adodb.connection

dim rs as adodb.recordset

dim arrByte() As Byte

 

cn.open myConnectionString

 

set rs = cn.execute("Select fldImage From tblImageStore")

 

arrByte = (rs!fldImage)

 

cn.close

 

Open "c:\inetpub\wwrott\media\images\webcamout.jpg" For Binary Access Write As #1

 

Put 1, , arrByte()

 

Close #1

---

1. Komponenten läser upp bilden som en byte-array från databasen.

2. En fil med skapas i en katalog som webbserven kommer åt. Jag använder vanliga filobjektet i VB.

3. Byte-arrayn skrivs till filen.

 

När användaren avslutar sessionen körs även ett "Event" och den temporära filen tas bort från hårddisken på webbservern. Detta visas inte i kodexemplet

 

För att spara en bild i databasen:

---

Dim cn as new adodb.connection

Dim arrByte() As Byte

 

Open "c:\inetpup\wwwroot\media\images\webCam.jpg" For Binary Access Read Lock Read As #1

 

ReDim arrByte(LOF(1) - 1)

 

Get 1 , arrByte()

 

Close #1

 

cn.open myConnectionString

 

cn.Exceute "Insert tblImageStore Values (" & arrByte & ")"

 

cn.close

---

1. Öppna bildfilen och läs in bilden som en byte array

2. Spara byte-arrayn i databasen. Egentligen använder jag en lagrad procedur för detta men för tydlighetens skull så...

 

Om jag inte minns fel så använder jag datatypen Image i min SQL-server 2000 databasen.

 

När man skall visa upp en bild kräver denna lösning att man "mellanlagrar" bild filen på webbservern. Filhantering påverkar alltid prestanda, så beroende på hur belastning och användadet ser ut på webbservern bör man nog vara lite försikt med att använda denna lösning.

 

*** Uppdatering ****

Kolla Erik Junesjös inlägg för förslag på en evetuellt bättre lösning vad gäller att visa bilder

***

 

Handlar det bara om att spara en bild till databasen är det nog inga problem men det är flera hundra användare som samtidigt skall hämta upp sin egen personliga bild skulle jag definitivt lösa det hela på ett annat sätt.

 

Som tidigare nämnts finns det andra bra sätt att lösa ditt problem med lastbalanserade servrar utan att behöva lagra bilden i databasen.

 

[inlägget ändrat 2001-10-25 09:42:43 av PJL]

[inlägget ändrat 2001-10-25 09:51:00 av PJL]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Erik Junesjö

Hej Simon!

Det är en bra fråga. Den bästa lösningen på ditt problem är att spara bilden i en s.k. blob. Här är två artiklar om hur du gör det.

http://www.planet-source-code.com/xq/ASP/txtCodeId.22/lngWId.4/qx/vb/scripts/ShowCode.htm

 

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsqlmag01/html/blob.asp

 

 

/Erik

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Erik Junesjö

Jag hittade den här kodsnutten som visar hur man hämtar ner bilden från databasen.

 

  <%@ LANGUAGE="VBSCRIPT" %>
  <%
  ' Clear out the existing HTTP header information
  Response.Expires = 0
  Response.Buffer = TRUE
  Response.Clear

  ' Change the HTTP header to reflect that an image is being passed.
  Response.ContentType = "image/gif"

  Set cn = Server.CreateObject("ADODB.Connection")
  ' The following open line assumes you have set up a System DataSource
  ' by the name of myDSN.
  cn.Open "Provider=SQLOLEDB; Data Source=server9; Initial Catalog=pubs; User ID=sa; Password="
  Set rs = cn.Execute("SELECT logo FROM pub_info WHERE pub_id='0736'")
  Response.BinaryWrite rs("logo")
  Response.End
  %>

 

Spara detta som en fil och anropa den med <img src="filnamn.asp">

 

/Erik

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
PJL

Det verkar vara en smidig lösning för att visa bilder. Dock gällde väl frågan även hur man gör för att spara en bild i databasen.

 

Dessutom är det aldrig bra, av flera skäl, att göra databasanrop direkt från ASP. Det man skulle kunna göra är att flytta över just databasanropet till en komponent men behålla resten i ASP.

 

 

 

 

[inlägget ändrat 2001-10-25 09:47:41 av PJL]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Ghostface

Tjo!

 

Först måste du he en kolumn i din tabell som kan spara binära "blobbar". Det finns en datatyp som heter "Image" som jag har använt tidigare för detta ändamål.

 

För att skicka upp bilderna kan du använda dig av SA-FileUp - www.softartisans.com. Det finns väldokumenterat hur man gör i deras exempel!

 

För att visa upp bilden använder du "Blobb" i ADO. Där kan du hämta ut bilden och visa upp den genom att köra en BinaryWrite. Lätt som en plätt.

 

Lycka till!

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
maz0

Vet inte om SQL server stödjer XMP, men om den gör det så kan det ju va en lösning för att spara bilder i en databas

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Chili

1) Använd SQL Server 2000

 

2) Skiv en stored proedure för all databas access

 

3) Skriv en komponent för ASP sidan

 

4) Tänk efter n-o-g-a om du verkligen inte ska lagra bara filnamnet

 

/C

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
BrianJensen

Jag letade som du också efter ett sätt att lagra bilder till en databas. Det mesta som jag hittade var en massa komponenter som man var tvungen att köpa som också hade en massa finesser. Men till sist hittade jag en sida som enkelt(även jag fattade det) förklarade hur man kunde göra det.

 

http://www.asp101.com/articles/jacob/scriptupload.asp

 

Hoppas att det här löser ditt problem.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...