Avatar billede cortx Nybegynder
23. marts 2008 - 04:16 Der er 9 kommentarer og
1 løsning

Upload script - skal udbygges til masseupload

Hej Ekspeter!

Jeg sidder med et upload script jeg har bygget sammen af forskellige funktioner herinde fra.

Jeg kunne godt tænke mig at den kan uploade 30 billeder af gangen med en browseknap til hver af de 30. felter - hvordan gør jeg det? ELLER, endnu BEDRE, er det muligt at lave en boks hvor man kan markere en række billeder og så trykke ok, hvorefter der i en stor boks kommer en liste over de valgt filer? Hvordan gøres det?

Løsningen med at vælge en række billeder i én browse, trykke ok, og så kommer der en liste over de valgte billeder, og så trykke indsæt - er ultimativt bedst..

På forhånd tusinde tak :)

Mit system ser således ud:

            if(isset($_POST[indsaet])) {
                    function imageresize($sourcefile,$maxwidth,$maxheight,$destinationfile=false)
                        {
                        $types=Array();
                        $types[1]='gif';
                        $types[2]='jpeg';
                        $types[3]='png';
                        $types[6]='wbmp';
                        list($width,$height,$type)=getimagesize($sourcefile);
                        $type_name=$types[$type];
                        $imagecreatefromtype='imagecreatefrom'.$type_name;
                        $imagetype='image'.$type_name;
                        if(!function_exists($imagecreatefromtype) || !function_exists($imagetype))
                        {
                        return false;
                        }
                        if($img_src=$imagecreatefromtype($sourcefile))
                        {
                        $ratio_height=$maxheight/$height;
                        $ratio_width=$maxwidth/$width;
                        $ratio=min($ratio_width,$ratio_height);
                        $newwidth=$width*$ratio;
                        $newheight=$height*$ratio;
                        $img_dst=imagecreatetruecolor($newwidth,$newheight);
                        // $img_dst=imagecreate($newwidth,$newheight);
                       
                        imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
                        // imagecopyresized($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
                        if($destinationfile==false)
                        {
                        //header("Content-type: image/jpeg");
                        $imagetype($img_dst);
                        }
                        else
                        $imagetype($img_dst,$destinationfile);
                        imagedestroy($img_dst);
                        return true;
                        }
                        else
                        {
                        return false;
                        }
                        }
                   
                   
                    //Her skal filen flyttes fra
                    $fra    = $_FILES['fil']['tmp_name'];
                   
                    //Hvilken type fil arbejder vi med?
                    $ext    = strtolower(end(explode(".", $_FILES['fil']['name'])));
                   
                    //Hvis filen er et jpg, jpeg eller gif billede
                    if($ext == "jpg" || $ext == "jpeg" || $ext == "gif")
                    {
                    $tid        = time();
                   
                    //Her giver vi billedet et andet navn, så der ikke kommer to ens navne…
                    $nytNavn = $tid . "_" . rand(1, 1000000) . "." . $ext;
                   
                    //Her er vores destination
                    $til        = "upload/billeder/org/" . $nytNavn;
                   
                    //Her sker det magiske:
                    move_uploaded_file($fra, $til);
                   
                    //Her resizer vi billedet med Xyborx’s funktion
                    $newSizeWidth    = 199;
                    $newSizeHeight    = 133;
                    $newSizeDes    = "upload/billeder/thumbs/" . $nytNavn;
                    imageresize($til, $newSizeWidth, $newSizeHeight, "upload/billeder/thumbs/" . $nytNavn);
                   
                    //Her ligges oplysningerne ind databasen – huske at connecte til den!
                    $query    = "INSERT INTO billeder (billede, tid) VALUES ('$nytNavn', '$tid')";
                    mysql_query($query);
                   
                    echo "<br /><br /><h2>Billedet er nu indsat!</h2>";
                    }
            }
Avatar billede jakobdo Ekspert
23. marts 2008 - 11:13 #1
Du kunne evt. kigge på denne applet: http://www.jumploader.com/
Den er faktisk ret smart.
Avatar billede olebole Juniormester
23. marts 2008 - 14:31 #2
<ole>

- og du kommer ikke udenom at blande Java (Java - ikke JavaScript), Flash eller ActiveX ind i projektet

/mvh
</bole>
Avatar billede cortx Nybegynder
23. marts 2008 - 15:40 #3
Det vil jeg også gerne, men er det nemt nok hvis man ikke har forstan på hverken java, flash eller activeX?
Avatar billede cortx Nybegynder
23. marts 2008 - 16:10 #4
Ja okay, jeg har selve apletten som virker, den er rigtig flot og ser god ud - har kigget i deres dokumentation, men jeg kan ikke finde ud af hvordan jeg får den til at uploade de valgte filer. Er det noget i kan hjælpe mig med? Har fundet det her: http://jumploader.com/doc_serverside_partphp.html# men det kan jeg heller ikke få til at virke ..
Avatar billede cortx Nybegynder
23. marts 2008 - 16:24 #5
Nu virker det, og den melder ingen fejl, men jeg kan ikke finde billederne. Den er sat til at uploade til jlupload/ i selve uploadHandleren.

Applet:
<applet name="jumpLoaderApplet"
    code="jmaster.jumploader.app.JumpLoaderApplet.class"
    archive="jumploader_z.jar"
    width="870px"
    height="500"
    mayscript
    >
    <param name="uc_uploadUrl" value="uploadHandler.php"/>
</applet>

uploadHandler.php:
<?
//----------------------------------------------
//    partitioned upload file handler script
//----------------------------------------------

//
//    specify upload directory - storage
//    for reconstructed uploaded files
$upload_dir = $_SERVER[ 'DOCUMENT_ROOT' ] . "jlupload/";

//
//    specify stage directory - temporary storage
//    for uploaded partitions
$stage_dir = $_SERVER[ 'DOCUMENT_ROOT' ] . "jlupload/temp/";

//
//    retrieve request parameters
$file_param_name = 'file';
$file_name = $_FILES[ $file_param_name ][ 'name' ];
$file_id = $_POST[ 'fileId' ];
$partition_index = $_POST[ 'partitionIndex' ];
$partition_count = $_POST[ 'partitionCount' ];
$file_length = $_POST[ 'fileLength' ];

//
//    the $client_id is an essential variable,
//    this is used to generate uploaded partitions file prefix,
//    because we can not rely on 'fileId' uniqueness in a
//    concurrent environment - 2 different clients (applets)
//    may submit duplicate fileId. thus, this is responsibility
//    of a server to distribute unique clientId values
//    (or other variable, for example this could be session id)
//    for instantiated applets.
$client_id = $_GET[ 'clientId' ];

//
//    move uploaded partition to the staging folder
//    using following name pattern:
//    ${clientId}.${fileId}.${partitionIndex}
$source_file_path = $_FILES[ $file_param_name ][ 'tmp_name' ];
$target_file_path = $stage_dir . $client_id . "." . $file_id .
    "." . $partition_index;
if( !move_uploaded_file( $source_file_path, $target_file_path ) ) {
    echo "Error:Can't move uploaded file";
    return;
}

//
//    check if we have collected all partitions properly
$all_in_place = true;
$partitions_length = 0;
for( $i = 0; $all_in_place && $i < $partition_count; $i++ ) {
    $partition_file = $stage_dir . $client_id . "." . $file_id . "." . $i;
    if( file_exists( $partition_file ) ) {
        $partitions_length += filesize( $partition_file );
    } else {
        $all_in_place = false;
    }
}

//
//    issue error if last partition uploaded, but partitions validation failed
if( $partition_index == $partition_count - 1 &&
        ( !$all_in_place || $partitions_length != intval( $file_length ) ) ) {
    echo "Error:Upload validation error";
    return;
}

//
//    reconstruct original file if all ok
if( $all_in_place ) {
    $file = $upload_dir . $client_id . "." . $file_id;
    $file_handle = fopen( $file, 'a' );
    for( $i = 0; $all_in_place && $i < $partition_count; $i++ ) {
        //
        //    read partition file
        $partition_file = $stage_dir . $client_id . "." . $file_id . "." . $i;
        $partition_file_handle = fopen( $partition_file, "rb" );
        $contents = fread( $partition_file_handle, filesize( $partition_file ) );
        fclose( $partition_file_handle );
        //
        //    write to reconstruct file
        fwrite( $file_handle, $contents );
        //
        //    remove partition file
        unlink( $partition_file );
    }
    fclose( $file_handle );
} ?>
Avatar billede jakobdo Ekspert
23. marts 2008 - 20:39 #6
Har du husket at chmod'e mappen: $upload_dir = $_SERVER[ 'DOCUMENT_ROOT' ] . "jlupload/"
til 777 ?
Avatar billede cortx Nybegynder
24. marts 2008 - 02:18 #7
Jeps .. Har et nyt problem hvis det er noget i kan løse..

Jeg har scriptet her:
<applet name="jumpLoaderApplet"
    code="jmaster.jumploader.app.JumpLoaderApplet.class"
    archive="jumploader_z.jar"
    width="870px"
    height="500"
    mayscript
    >
<param name="uc_uploadUrl" value="uploadHandler.php" />
</applet>

Men udenfor den har jeg lavet en select og en button (type: submit) som angiver den kategori der skal uploades til. Hvordan får jeg den med over i uploadHandler.php fra apletten/scriptet? Jeg har prøvet både med hidden input, ?kategori=xx i uploadHandler.php.. Kan man lave en param der kan hentes fra uploadHandler?

Måske noget i stil med:
<param name="kategori" value="'.$_POST[kategori].'" />

????

På forhånd tak,
Rasmus Henriksen
Avatar billede cortx Nybegynder
24. marts 2008 - 02:55 #8
Får hjælp i Java kategorien - smid et svar jakobdo :)
Avatar billede jakobdo Ekspert
24. marts 2008 - 09:02 #9
Svar!
Avatar billede jakobdo Ekspert
24. marts 2008 - 13:40 #10
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
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