Avatar billede s0mmer Nybegynder
06. september 2006 - 22:00 Der er 21 kommentarer og
1 løsning

Multi-upload 100+

Hej eksperter,
Jeg har nedenstående upload kode, men problemet er at man uploadet en fil af gangen. Jeg har brugere der skal uploade eks. 100 billeder af gangen, og så tager det altså lang tid således. Jeg har set nogle steder at man så har 10 "Gennemse.." knapper så man kan uploade 10 af gangen, men stadigvæk, er der ikke en måde hvor man evt. kan tage en hel mappe af gangen? Det har jeg bl.a. set i en javaapplet.

Koden for upload lige pt:
//Upload
    if ($_POST['action'] == "addpic" && isset($_FILES['userfile'])) {
        if ($_FILES['userfile']['name'] != "") {
            if (($_FILES['userfile']['type'] == "image/pjpeg") || ($_FILES['userfile']['type'] == "image/jpeg")) {
                $tempnavn = str_replace("æ", "ae", $_FILES['userfile']['name']);
                $tempnavn = str_replace("ø", "oe", $tempnavn);
                $tempnavn = str_replace("å", "aa", $tempnavn);
                $filnavn = str_replace(" ", "_", $tempnavn);
                $gemfil = "temp/".$filnavn;
                if (!@move_uploaded_file($_FILES['userfile']['tmp_name'], $gemfil)) {
                    echo "Billedet kunne ikke gemmes.<br>\n";
                } else {
                    $pic1 = ImageCreateFromJPEG($gemfil);
                    $sizeX = ImageSX($pic1);
                    $sizeY = ImageSY($pic1);
                   
                    $pic2 = ImageCreateFromGIF("images/fotologo.gif");
                    $lsizeX = ImageSX($pic2);
                    $lsizeY = ImageSY($pic2);
                   
                    // Udregn hvor billedet skal placeres (nederste højre hjørne her)
                    $posX = $sizeX - $lsizeX;
                    $posY = $sizeY - $lsizeY;
                   
                    // Indsæt logo med 80% blanding
                    ImageCopyMerge($pic1, $pic2, $posX, $posY, 0, 0, $lsizeX, $lsizeY, 100);
                   
                    $wscale = 600 / $sizeX;
                    $hscale = 450 / $sizeY;
                    $scale = ( $hscale < $wscale ? $hscale : $wscale );
                    $nw = round( $sizeX * $scale, 0 );
                    $nh = round( $sizeY * $scale, 0 );
                    $dstim = imagecreatetruecolor( $nw, $nh );
                    imagecopyresampled( $dstim, $pic1, 0, 0, 0, 0, $nw, $nh, $sizeX, $sizeY );

                    // Gem billede
                    ImageJPEG($dstim, "fotos/".$_POST["select"]."/".$filnavn, 100);
                   
                    // Ryd op (inkl. sletning af midlertidig fil)
                    ImageDestroy($pic1);
                    ImageDestroy($pic2);
                    unlink($gemfil);
                   
                    echo "Billedet blev gemt.<br>\n";
                    $db->ExecSQL("INSERT INTO snm_galleri (galleri,billede)VALUES('".$_POST["select"]."','".$_POST["select"]."/".$filnavn."')");
echo "<script language='Javascript'>
alert ('Billedet er uploadet!')
</script>";
echo "<script> location = 'admin_billeder.php' </script>";
                }
            }
        }
    } else {
?>


200 points for et forholdsvis stort spørgsmål.
Avatar billede leif Seniormester
06. september 2006 - 22:11 #1
For at kunne gøre det du vil skal du ud i et ActiveX object eller lign.

Det kan ikke gøres med ren PHP
Avatar billede jensgram Nybegynder
06. september 2006 - 22:12 #2
Ja, et stort spm, men desværre et meget kort svar: Nej, det kan man ikke.
Avatar billede jensgram Nybegynder
06. september 2006 - 22:12 #3
pisHANS - hader at åbne spørgsmål i tabs og så ikke lige få opdateret ;)
Avatar billede moocher Nybegynder
06. september 2006 - 22:12 #4
Det der er med hjemmeside upload er for det meste at du skal "loade" en side mens det sker og da det tager så lang tid at uploade billederne kommer der timeout på siden :) Selvom du er igang med at uploade, men hvordan du uploader en hel mappe ad gangen kan jeg ikke hjælpe med :)
Avatar billede s0mmer Nybegynder
06. september 2006 - 22:19 #5
Det var det jeg frygtede. Lad os dreje den lidt så. Hvordan laver jeg med min kode så der er 10 gennemse felter, dvs jeg uploader 10 filer af gangen. + at den indsætter alle 10 i databasen som den gør enkeltvis nu. + at hvis nogle felter er tomme, skal de self. ikke tælle som en fil
Avatar billede coderdk Praktikant
06. september 2006 - 22:29 #6
Fil-feltet:

Fil 1: <input type="file" name="userfile[]"><br>
Fil 2: <input type="file" name="userfile[]"><br>
Fil 3: <input type="file" name="userfile[]"><br>
...
Fil 10: <input type="file" name="userfile[]"><br>

Dit nye uploadscript:

    if ($_POST['action'] == "addpic" && isset($_FILES['userfile']))
    {
        foreach ( $_FILES['userfile'] as $file )
        {
            if ($file['name'] != "")
            {
                if (($file['type'] == "image/pjpeg") || ($file['type'] == "image/jpeg"))
                {
                    $tempnavn = str_replace("æ", "ae", $file['name']);
                    $tempnavn = str_replace("ø", "oe", $tempnavn);
                    $tempnavn = str_replace("å", "aa", $tempnavn);
                    $filnavn = str_replace(" ", "_", $tempnavn);
                    $gemfil = "temp/".$filnavn;
                    if (!@move_uploaded_file($file['tmp_name'], $gemfil))
                    {
                        echo "Billedet kunne ikke gemmes.<br>\n";
                    }
                    else
                    {
                        $pic1 = ImageCreateFromJPEG($gemfil);
                        $sizeX = ImageSX($pic1);
                        $sizeY = ImageSY($pic1);
                     
                        $pic2 = ImageCreateFromGIF("images/fotologo.gif");
                        $lsizeX = ImageSX($pic2);
                        $lsizeY = ImageSY($pic2);
                     
                        // Udregn hvor billedet skal placeres (nederste højre hjørne her)
                        $posX = $sizeX - $lsizeX;
                        $posY = $sizeY - $lsizeY;
                     
                        // Indsæt logo med 80% blanding
                        ImageCopyMerge($pic1, $pic2, $posX, $posY, 0, 0, $lsizeX, $lsizeY, 100);
                     
                        $wscale = 600 / $sizeX;
                        $hscale = 450 / $sizeY;
                        $scale = ( $hscale < $wscale ? $hscale : $wscale );
                        $nw = round( $sizeX * $scale, 0 );
                        $nh = round( $sizeY * $scale, 0 );
                        $dstim = imagecreatetruecolor( $nw, $nh );
                        imagecopyresampled( $dstim, $pic1, 0, 0, 0, 0, $nw, $nh, $sizeX, $sizeY );
   
                        // Gem billede
                        ImageJPEG($dstim, "fotos/".$_POST["select"]."/".$filnavn, 100);
                     
                        // Ryd op (inkl. sletning af midlertidig fil)
                        ImageDestroy($pic1);
                        ImageDestroy($pic2);
                        unlink($gemfil);
                     
                        echo "Billedet blev gemt.<br>\n";
                        $db->ExecSQL("INSERT INTO snm_galleri (galleri,billede)VALUES('".$_POST["select"]."','".$_POST["select"]."/".$filnavn."')");
                        echo "<script language='Javascript'>
                        alert ('Billedet er uploadet!')
                        </script>";
                        echo "<script> location = 'admin_billeder.php' </script>";
                    }
                }
            }
        }
    } else {
Avatar billede jensgram Nybegynder
06. september 2006 - 22:30 #7
Evt.

            if ($file['name'] != "")
            {
                if (($file['type'] == "image/pjpeg") || ($file['type'] == "image/jpeg"))
                {

-->

            if ($file['name'] != "" && ($file['type'] == "image/pjpeg" || $file['type'] == "image/jpeg"))
                {
Avatar billede leif Seniormester
06. september 2006 - 23:07 #8
Jeg har faktisk været udefor nogen som kunne sætte 1 fil igang og andre som kunne sætte 14+ igang. Det er et spørgsmål om folks forbindelse når vi snakker basis http upload.
Avatar billede Slettet bruger
07. september 2006 - 00:09 #9
Men er der ikke noget med pr. default kan man maks upload 2 el. 8mb?
Vil det så ikke sige, hvis man upload 2 filer, og det maks må være 2mb, så kan hver fil kun fylde 1mb???

Har jeg misforstået?
Avatar billede Slettet bruger
07. september 2006 - 00:11 #10
sOmmer> Er det sådan at man må se din Class db? altså med ExecSQL og sendSQL smat din connection (husk at fjerne dit login, ikke det jeg vil lokke dig til at vise, men for at se hvordan du har gjort.)???
Avatar billede gider_ikke_mere Nybegynder
07. september 2006 - 00:13 #11
Jeg bruger Coppermine Photo Gallery på en privat side. Der kan man opsætte systemet, således at man kan uploade via Stifinder -> Udgiv denne fil på World Wide Web. Her kan du vælge så mange billeder eller andre filer du vil. Folk skal bare højreklikke på en .regfil på sitet, gemme på skrivebord, dobb. klikke. Derefter vil link til sitet fremover være vist når der klikkes "Udgiv denne fil på World Wide Web". Både som administrator og bruger kan man lave multiupload som det du nævner.
Avatar billede Slettet bruger
07. september 2006 - 00:19 #12
Okay men det vil sige jeg har ret?
Avatar billede gider_ikke_mere Nybegynder
07. september 2006 - 00:26 #13
Det er PHP serveren, og dermed udbyderen der bestemmer filstørrelsen. Nogle kan betales for at tillade større filer. Grænsen er pr fil.
Avatar billede coderdk Praktikant
07. september 2006 - 00:32 #14
akyhne, Ikke kun pr. fil, der er også post_max_size- Det er så den samlede post størrelse :)
Avatar billede s0mmer Nybegynder
10. september 2006 - 10:23 #15
coderdk - beklager jeg først svarer, men har ikke haft mulighed før nu. når jeg klikker upload bare evt med 2 filer valgt, så får jeg hvid skærm
Avatar billede Slettet bruger
11. september 2006 - 11:16 #16
Lige en ref. til mit tidligere spm:
Kommentar: coldgate
07/09-2006 00:11:56
Avatar billede s0mmer Nybegynder
11. september 2006 - 14:55 #17
det ligger vel allerede i koden som jeg har postet, hvis jeg selvfølgelig forstår dig korrekt:

$db->ExecSQL("INSERT INTO snm_galleri (galleri,billede)VALUES('".$_POST["select"]."','".$_POST["select"]."/".$filnavn."')");
Avatar billede gider_ikke_mere Nybegynder
11. september 2006 - 15:24 #18
Der er ingen kald til din database i koden(login & password, Function til at forklare hvad ExecSQL gør)! Kun hvilken tabel og feltnavn der skal skrives til! Der mangler en include eller require til nogle filer.
Avatar billede s0mmer Nybegynder
11. september 2006 - 16:23 #19
akyhne -> jeg har en include hvor alle mine dbcon oplys. er i. men var usikker på om det var det han søgte efter her? fordi den er halvlang. og tror ikke vi finder fejlen der.
Avatar billede s0mmer Nybegynder
11. september 2006 - 17:05 #20
lukker, og åbner med præcist spørgsmål
Avatar billede s0mmer Nybegynder
11. september 2006 - 17:05 #21
svar
Avatar billede Slettet bruger
11. september 2006 - 17:22 #22
Jamen du kalder jo function ExecSQL via classen's objekt -> $db
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