Avatar billede budda Nybegynder
04. februar 2002 - 16:23 Der er 15 kommentarer og
1 løsning

Upload billed og tumbnail til en MySQL database

Hej..
Jeg vil gerne høre om hvordan jeg kan uploade billeder til min database og der skal også laves en tumbnail..

Ved man kan men har ikke for meget forstand på det...

HILFE

/Mikkel
Avatar billede Noone Nybegynder
04. februar 2002 - 17:37 #1
Mener du at du vil lægge billedet i databasen? Det er et helvede at arbejde med, men kan dog lade sig gøre (Ved dog ikke lige hvordan).

Jeg har noget kørende, hvor Sti og filnavn bliver puttet i databasen, sammen med description, title, og hvem der har uploaded billedet. samtidigt laves en thumbnail.

Du skal kigge på PHP's image funktioner, på filesystem funktionerne, og på mysql funktionerne.

Hvis du ønsker noget færdigt, kan du kigge på www.hotscripts.com eller se om http://nwphotos.2y.net ligner det du søger.
Avatar billede budda Nybegynder
04. februar 2002 - 17:51 #2
Ja det har jeg også men da jeg har ubegrænset MySQL plads og kun 20mb plads på server så er det jo smartere det andet!
Avatar billede christian-s Nybegynder
04. februar 2002 - 20:08 #3
budda> Det er bedst og smartest at gøre som chanoa har gjort.
Databasen vil hurtigt køre tungt med billederne direkte ind i databasen, de fleste vælger kun at lægge stien...

chanoa> Kunne man låne din kode eller dele af den?
Avatar billede budda Nybegynder
04. februar 2002 - 20:41 #4
Ja men jeg vil lægge helæt billedet ind..
Ikke bare en sti...
Avatar billede rzj Nybegynder
04. februar 2002 - 23:12 #5
Jeg gør det at jeg uploader billedet som fil og laver et thumbnail samstidigt. Jeg navngiver (omdøber) billeder på denne måde : tabelnavn_id.jpg
på den måde bliver billedet knyttet til den aktuelle mysql tabel og brugerens id. Jeg kan herefter tilbageføre billedet (slå op i tabellen efter oplysninger knyttet til billeder) ved at bruge explode() funktionen. Dette er rigtigt smart da man så hverken behøver at komme sti'er i databasen, men kun tekst. eks. en billedetekst osv.
Avatar billede budda Nybegynder
05. februar 2002 - 07:21 #6
Uploader den helebilledet til en mysql database fordi jeg har koderne til at trække det ud som et billede..men mangler bare at få det uploadet :)
Avatar billede avminarm Juniormester
05. februar 2002 - 08:47 #7
chanoa>> - jeg har længe ledt efter en kode lignende din - kunnne man evt få den tilsendt på eksperten@avminmusearm.dk
Avatar billede rzj Nybegynder
05. februar 2002 - 11:51 #8
Her der lidt kode !
Jeg har lagt en folder kaldet upload i samme bib som filen upload.php (indeholdende koden som vist nedenfor). I upload folderen er der endnu  en folder kaldet thumbs. Kig det igennem og se omd et er noget I kan bruge. Jeg er ikke sikker på at tuborgklammer er ordentligt lukket da jeg lige har klippen det ud fra et større script (I må tælle) ;-)

I kan jo kigge lidt på det:

if($file != "none") {
        //Directory in  which to work
        $image_dir = "/den/fulde/sti/til/upload/";
        $dest = $image_dir.$file_name;
        //Array containing valid file types
        $formats = array('jpg', 'gif', 'png');
        //Definition of filename
        $file_name = stripslashes($file_name);
        //Set max filesize
        $size = 200000;
        //Get filetype
        $file_type = strtolower(substr($file_name,-3));
        //Define name of file when renamed
        $renamed = "navn_på_fil_når_uploadet".$file_type;
       
        //Check if file has zero size
        if($file_size == 0){
            error("Filen er tom!");
        }
        //Check if file is above limit for file
        if($file_size > $size){
            $file_size = round($file_size/1000, 0);
            $size_in_kb = $size/1000;
            error("Filen er for stor - $file_size KB! <br>
            Filen må højst fylde $size_in_kb KB.<br>\n
            Prøv evt. at gemme filen i et andet format eller gøre billedet mindre.");
        }
       
        //Check if file is uploaded via HTTP POST
        if(!is_uploaded_file($file)){
            error("Muligt 'crackattack' fra uploadet fil!");
        }
       
        //Check if filetype is  valid
        if(!in_array($file_type, $formats)) {
            error("Forkert filtype. Det er kun muligt at uploade billeder af filtypen *.gif, *.jpg, *.png");
        }
       
        //Failed to copy file on server or greenlight for "go"
        if(!copy($file, $image_dir.$file_name)) {
            error("Unable to create $dest - check permissions<br>\n");
        }
       
        //Try to rename file. Delete on failure
        if(@!rename($image_dir.$file_name, "upload/$renamed")){
            unlink("$image_dir/$file_name");
            error("Kunne ikke omdøbe fil - prøv igen");
        }
   
        //CREATE A THUMBNAIL
       
        //set quality parameter
        $quality = 40;
        //Get size of big image
        $src_dim = getimagesize($image_dir.$renamed);
       
        //Set correct dimensions for new image (thumb)
        if($src_dim[0] < $src_dim[1]){
            $dest_width = 80;
            $dest_height = 100;
        } else {
            $dest_width = 100;
            $dest_height = 80;
        }
        //Create thumb dependent of image type
        if($file_type == "jpg"){
           
            //Create a image in buffer from source image
            $src_img = imagecreatefromjpeg("$image_dir"."$renamed");
           
            //Create distination image in buffer with correct dimensions
            $dst_img = imagecreatetruecolor($dest_width,$dest_height);
           
            //Copy the image from source to destination
            imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width,
            $dest_height, $src_dim[0], $src_dim[1]);
            imagejpeg($dst_img, $image_dir."/thumbs/$renamed", $quality);
       
            //Destroy the buffers
            imagedestroy($src_img);
            imagedestroy($dst_img);
       
        } elseif ($file_type == "png"){
       
            $src_img = imagecreatefrompng("$image_dir/$renamed");
            $dst_img = imagecreatetruecolor($dest_width,$dest_height);
            imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width,
            $dest_height, $src_dim[0], $src_dim[1]);
            imagepng($dst_img, "$image_dir/thumbs/$renamed",     $quality);
            imagedestroy($src_img);
            imagedestroy($dst_img);
       
        } elseif($file_type == "gif"){
            if(!copy($file, "$image_dir/thumbs/$renamed")) {
                error("Unable to create $dest - check permissions<br>\n");
            }
        } else {
            error("Forkert filtype. Det er kun muligt at uploade billeder af filtypen *.gif, *.jpg, *.png");
        }
               
       
}
Avatar billede rzj Nybegynder
05. februar 2002 - 11:54 #9
Og jeg staver rigtigt flåt - sorry. Læg mærke til at jeg kun laver thumbs af jpg og png. Gif's er IKKE understøttet af GDLib i nyeste versioner af PHP, derfor. Men altså gif's er også rimeligt komprimerede så det burde gå.
Ellers kan accepterede filtyper ændres så det kun er muligt at uploade jpg's og png's - your choice...
Avatar billede budda Nybegynder
05. februar 2002 - 15:52 #10
Den indsætter ikke helebilledet i en database...
Avatar billede budda Nybegynder
05. februar 2002 - 16:22 #11
Kan man ikke tage sourcen fra det billed man uploader og lave en tump af det inden?
Uden noget kommer på serverpladsen?
Avatar billede rzj Nybegynder
05. februar 2002 - 21:08 #12
1. Næ, den indsætter det ikke i db. Hvis du vil det så skal du læse billedfilen igennem med fpassthru()-funktionen, og så knalde hele billedets kode i db. Dernæst skal du når du vil ha' et billede vist, få PHP til at generere en billedfil af det billede-data der ligger i db.
Jeg vil dog ikke anbefale denne løsning. Se på www.mysql.com hvorfor -->det sløver din db helt sindsygt!!
2. Altså PHP kører jo server-side, så du skal som minimum give plads til en stor billedfil, der uploades. Dernæst kan du lave et thumb og så kan du slette det oprindelige uploade'ede billede med unlink()-funktionen

Håber du kan bruge noget af det !
Avatar billede rzj Nybegynder
05. februar 2002 - 21:10 #13
Jeg synes iøvrigt det er interessant at du kun har 20 MB plads men ubegrænset mysql plads !!
Sig mig gerne hvilken udbyder du hoster hos ? Det lyder som et slag tilbud ;-)
Avatar billede budda Nybegynder
05. februar 2002 - 22:15 #14
hos secnet.dk
Avatar billede christian-s Nybegynder
06. februar 2002 - 14:00 #15
chanoa> Jeg ville også meget gerne låne din kode, hvis du gider, må du meget gerne sende den til christian@steffensenweb.dk

rzj> Tak, jeg vil prøve at se lidt på den, det ser jo godt ud :)
Avatar billede budda Nybegynder
06. februar 2002 - 15:28 #16
Lukker...
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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

IT-JOB