Avatar billede deamill Nybegynder
22. maj 2010 - 16:04 Der er 18 kommentarer og
1 løsning

Billeder i MYSSQL

Hejsa,

Er det muligt at gemme billeder i en MYSQL database?

Hvis ja, hvordan gør man det så?

/Kenneth
Avatar billede arne_v Ekspert
22. maj 2010 - 16:06 #1
Ja.

Vælg felt type BLOB/MEDIUMBLOB/LONGBLOB alt efter hvor store billeder du har brug for at gemme.

Og å indsætter du med helt normal INSERT og brug af parameters/prepared statement.

Hvilket programmering sprog bruger du?
Avatar billede deamill Nybegynder
22. maj 2010 - 16:18 #2
Hej, jeg bruger ASP
Avatar billede arne_v Ekspert
22. maj 2010 - 16:24 #3
I ASP hedder det parameters.
Avatar billede deamill Nybegynder
22. maj 2010 - 16:31 #4
Ok, vil det sige at jeg i min insert bare peger på den lokale sti til filen, eller har jeg misforstået dig?
Avatar billede arne_v Ekspert
22. maj 2010 - 16:36 #5
Ja.

Du læser filen ind i et byte array og sætter det som value for en parameter.
Avatar billede deamill Nybegynder
22. maj 2010 - 16:51 #6
ok, det må jeg lige prøve at kigge på så :-)
Avatar billede deamill Nybegynder
22. maj 2010 - 23:12 #7
Ja, det fik jeg ikke meget ud af :p Kan du evt. linke til et sted hvor jeg kan se et simpelt eksempel på noget ASP kode som kan gøre det?
Avatar billede arne_v Ekspert
23. maj 2010 - 04:21 #8
Insert:


<%
' CREATE TABLE demo (id INTEGER NOT NULL PRIMARY KEY, pic BLOB);
adInteger = 3
adVarBinary = 204
adParamInput = 1
adTypeBinary = 1
Set con = Server.CreateObject("ADODB.Connection")
con.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Option=16834;Database=Test;"
Set stm = Server.CreateObject("ADODB.Stream")
stm.Type = adTypeBinary
stm.Open
stm.LoadFromFile Server.MapPath("y.jpg")
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = con
cmd.CommandText = "INSERT INTO demo VALUES(?,?)"
cmd.Parameters.Append(cmd.CreateParameter("@id", adInteger, adParamInput))
cmd.Parameters.Append(cmd.CreateParameter("@pic", adVarBinary, adParamInput, 65535))
cmd.Parameters("@id") = 1
cmd.Parameters("@pic") = stm.Read
cmd.Execute
Set cmd = Nothing
Set stm = Nothing
Set con = Nothing
%>
OK


Select:


<%
adInteger = 3
adParamInput = 1
Set con = Server.CreateObject("ADODB.Connection")
con.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Option=16834;Database=Test;"
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = con
cmd.CommandText = "SELECT pic FROM demo Test WHERE id = ?"
cmd.Parameters.Append(cmd.CreateParameter("@id", adInteger, adParamInput))
cmd.Parameters("@id") = 1
Set rs = cmd.Execute
Response.Clear
Response.ContentType = "image/jpeg"
Response.BinaryWrite rs("pic")
Response.End
Set rs = Nothing
Set cmd = Nothing
Set con = Nothing
%>
Avatar billede arne_v Ekspert
23. maj 2010 - 04:21 #9
Avatar billede deamill Nybegynder
23. maj 2010 - 17:14 #10
Hej Arne_v,

Jeg vil lige høre... Den her sætning:

stm.LoadFromFile Server.MapPath("y.jpg")

Er det en fil på min lokale harddisk, eller er det på serveren?

Meningen er jo, at jeg skal kunne oploade en lokal fil fra min pc til databasen på nettet.

/Kenneth
Avatar billede arne_v Ekspert
23. maj 2010 - 19:06 #11
Den bruger en fil på serveren.

Hvis det er en upload funktionalitet du er ved at lave så skal du naturligvis hente fra POST request og ikke fra serverens fil system.
Avatar billede deamill Nybegynder
23. maj 2010 - 21:11 #12
Det tænnkte jeg nok :-) Du skulle vel aldrig have et link til et eksempel som viser det?

Når jeg søger, så syntes jeg kun jeg finder eksempler ala det du giver ovenfor :-/
Avatar billede arne_v Ekspert
24. maj 2010 - 17:55 #13
Jeg kan godt proeve og bixe noget.
Avatar billede arne_v Ekspert
25. maj 2010 - 02:56 #14
Hm.

Er det en rå POST af en fil eller er det en FORM med INPUT TYPE=FILE der skal uploades?
Avatar billede danco Nybegynder
26. maj 2010 - 09:11 #15
Jeg tillader mig lige at snylte på dette spørgsmål.

er dette den optimale måde at gøre det på ? altså gemme som BLOB. Jeg mener bare, fylder det ikke meget i databasen?
Og derudover er det vel et problem at det tager lang tid når man skal hente ud.
Avatar billede arne_v Ekspert
26. maj 2010 - 16:10 #16
Det spoergsmaal er et af mine yndlings emner!

:-)

Tilbage med Access 95/Windows/Pentium+16GB RAM+300MB disk var det totalt draebende for databasen at gemme filer i den.

Tiderne er anderledes idag.

Mindre filer (KB filer) er ingenting data stoerrelses maessigt.

Og det er faktisk en ret dyr operation at aabne en fil.

Hvis du lader web serveren streame filerne ud direkte, saa er det nok minimalt hurtigere. Men skal filerne streames ud af din app for at integrere med applikationen security, saa vil databasen vaere lige saa hurtig.

Og det er nu engang nemmere at administere hvis alt er i databsen fremfor at have refs i databasen og filer drysset ud paa disken.

Bedste argument for eksterne filer er danske billig web hotellers politik med at tilbyde 10 MB database plads og 1 GB filplads.

Men i den lidt tungere ende er det helt normalt at gemme filer i databaser. Der er meget serioese produkter fra Oracle og Microsoft som baserer sig paa den loesning.
Avatar billede arne_v Ekspert
13. juni 2010 - 04:01 #17
deamill?
Avatar billede deamill Nybegynder
02. september 2010 - 07:54 #18
hej arne_v sorry, du må gerne lige svare :)
Avatar billede arne_v Ekspert
02. september 2010 - 15:26 #19
svar
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
Computerworld tilbyder specialiserede kurser i database-management

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