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>";
}
}
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?
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 );
} ?>
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