Avatar billede supermand69 Nybegynder
03. februar 2004 - 21:21 Der er 20 kommentarer og
1 løsning

gemme fil i database

Hej..

Hvordan kan man gemme filer i MySQL??

jeg har et lille postsystem hvor man har mulighed for at sende små filer med (<100kb)
Avatar billede arne_v Ekspert
03. februar 2004 - 21:41 #1
Lav en tabel med et felt som kan holde tilpas lange værdier og så gemmer og
henter du bare data.
Avatar billede arne_v Ekspert
03. februar 2004 - 21:41 #2
MEDIUMTEXT felt type bør passe til dit behov.
Avatar billede alvion Nybegynder
03. februar 2004 - 21:51 #3
Generelt er det en dårlig ide at gemme filer i databasen. Filer fylder generelt meget (100kb er også meget), og hvis de slettets bliver tabellen hurtigt meget fragmenteret.

Gem filerne i en mappe istedet med et filnavn, der er genereret udfra f.eks. en auto-genereret nøgle. Lav derefter en tabel, der indeholder det genererede filnavn + det oprindelige filnavn (hvis det senere skal bruges).

Kort sagt: Brug altid dine lagrings systemer til det, de er bedst til. Filsystemet er til filer, databasesystemet er til data.
Avatar billede arne_v Ekspert
03. februar 2004 - 22:16 #4
Jeg er uenig.

Databaser idag kan sagtens håndtere filer i den størrelse.

Både Oracle og Microsoft leger med at ligge fil systemer ovenpå
en database, således at alle filer ligger i en database.

Om det er fremtiden vides ikke idag.

Men en moderne database kan sagtens håndtere 100 KB filer fornuftigt.
Avatar billede supermand69 Nybegynder
03. februar 2004 - 23:42 #5
arne_v -->
hvad så med MySQL... hvordan håntere den filer??
Avatar billede arne_v Ekspert
03. februar 2004 - 23:50 #6
Det bør heller ikke være noget problem.

Men jeg har dog aldrig testet det.
Avatar billede supermand69 Nybegynder
03. februar 2004 - 23:55 #7
jamen hvordan skal jeg så gemme en fil i et text felt?? skal filen laves binær eller hvad??

og hvordan trækker man filen ud af MySQL igen?
Avatar billede ztyxx Nybegynder
04. februar 2004 - 00:01 #8
feltet skal du sætte til BLOB, prøv at kigge på denne http://www.delfs.dk/articles/danish/Filer_i_mysql.html
Avatar billede arne_v Ekspert
04. februar 2004 - 00:06 #9
ztyxx>

MEDIUMBLOB hvis det er en binær fil.

Jeg gik udfra at det var en tekst fil (p.g.a. "post system") og så er
MEDIUMTEXT fint.
Avatar billede arne_v Ekspert
04. februar 2004 - 00:09 #10
supermand>

fat client:

læs disk fil op i byte/char array
indsæt i tabel

hent fra tabel op i byte/char array
skriv til disk fil

web løsning:

lave HTML upload form
lav server side script som læser uploadet fil og gemmer i tabel

lav link til server side script med filnavn som parameter
lav server side script som henter fil fra tabel og returnerer til browser
Avatar billede ztyxx Nybegynder
04. februar 2004 - 00:09 #11
arne_v> okay, men den virker som BLOB i eksemplet
Avatar billede arne_v Ekspert
04. februar 2004 - 00:12 #12
Selvfølgelig.  :-)
Avatar billede alvion Nybegynder
04. februar 2004 - 09:12 #13
arne_v -> Ja de projekter har jeg også kendskab til (MS' er projektet "Longhorn", et nyt data storage). Men jeg er ret sikker på, at både Oracle og MS optimerer det dataspace, som skal danne grundlag for at lagre filer.

Anyway, så er min "advarsel" også rettet imod at supermand69's postsystem måske med tiden ændrer sig fra at være filer <100kb til at blive >500kb
Avatar billede alvion Nybegynder
04. februar 2004 - 09:13 #14
Desuden er der typisk flere funktioner i et givent programmeringssprog til at behandle filer, end der er til at behandle binære data. Så arbejdet vil også derfor blive lettere med filer.
Avatar billede supermand69 Nybegynder
04. februar 2004 - 13:55 #15
ztyxx -->
lav et svar :)
Avatar billede supermand69 Nybegynder
04. februar 2004 - 13:56 #16
det er altså sådan her man trækker filen ud igen??

extract(mysql_fetch_array(mysql_query("SELECT * FROM $DB_POST.1 WHERE id=$_GET[id]")));

header("content-type: image/$file_type");
echo $file;
Avatar billede arne_v Ekspert
04. februar 2004 - 15:40 #17
alvion>

500 KB burde heller ikke være noget problem idag.

Og CPU power, RAM størrelse og disk størrelse vokser konstant.

Medmindre vi snakker om virkeligt store filer, så er teorien om at man ikke
kan gemme filer i en database forældet.
Avatar billede lap Nybegynder
05. februar 2004 - 00:57 #18
Oracle gemmer filer i mange Mb uden problemer - det gør f.eks. journalsystemer

Undskyld spam :-)
Avatar billede ztyxx Nybegynder
05. februar 2004 - 01:00 #19
så gør jeg det :-)
Avatar billede arne_v Ekspert
05. februar 2004 - 01:15 #20
Jeg har engang fået at vide at AOL bruger en database som email repository
for deres kunder.

35 millioner POP3 konti må indeholde "en del" emails.
Avatar billede ztyxx Nybegynder
05. februar 2004 - 12:23 #21
takker for point :-)
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