Webprofis is een Forum waarin je vragen kunt stellen die webgerelateerd zijn. Heb je vragen over of problemen met je Webpagina, HTML, CSS, Javascript, PHP of andere client of serverside scriptingtalen? Stel ze dan gerust op dit forum.
Op dit forum zijn een aantal vrijwilligers actief die u graag met uw vragen willen helpen en u waar mogelijk een passend antwoord aanbieden.
Hebt u zelf veel ervaring en kennis met betrekking tot het bovenstaande? U bent van harte welkom om uw kennis met anderen te delen!
We hopen dat eenieder op dit Forum een leerzame ervaring mag opdoen.
Team Webprofis
We hopen dat eenieder op dit Forum een leerzame ervaring mag opdoen.
Team Webprofis
multifile image upload en thumb weergave
Een tijd geleden had ik dit gemaakt voor iemand die meerdere images tegelijk wilde uploaden en direct getoond wilde zien in thumbnailformaat.
Handmatig moet er wel een map 'images' aangemaakt worden met daarin een map 'thumbs'
Als er verbeteringen mogelijk zijn hoor ik het graag.
Voorbeeld: http://www.jackmaessen.nl/test/multifile_image_upload.php
Handmatig moet er wel een map 'images' aangemaakt worden met daarin een map 'thumbs'
Als er verbeteringen mogelijk zijn hoor ik het graag.
Voorbeeld: http://www.jackmaessen.nl/test/multifile_image_upload.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled</title>
<style type="text/css">
/* images getoond met breedte 100px en hoogte na rato */
img {
width: 100px;
height: auto;
}
</style>
</head>
<body>
<?php
error_reporting(E_ALL);
$resultaat[] = '';
echo implode(array_unique($resultaat)); // melding geven of uploaden goed of fout is gegaan
if($_SERVER['REQUEST_METHOD'] == 'POST') {
//definities
$i=0;
// functie image extensie
function get_image_extension($name) {
$name = strtolower($name);
$i = strrpos($name,".");
if (!$i) { return ""; }
$l = strlen($name) - $i;
$extension = substr($name, $i+1,$l);
return $extension;
}
// check of veld leeg is
if($_FILES['upload']['name'][$i] == "") {
echo 'Inputveld is leeg. Browse eerst voor een image en klik dan op Upload Bestanden!<br /><br />';
}
else {
// upload bestand(en)
for($i=0; $i<count($_FILES['upload']['name']); $i++) {
$maximum_size = $_POST['maxsize']; // maximum groote in bytes (5Mb) in form bepaald
//tijdelijke filepath
$filename = $_FILES['upload']['name'][$i];
$tmpfilepath = $_FILES['upload']['tmp_name'][$i];
$size=filesize($_FILES['upload']['tmp_name'][$i]);
// check grootte bestand
if ($size > $maximum_size) {
$resultaat[] = 'Bestand(en) is te groot!<br /><br />';
}
$extension = get_image_extension($filename);
// controle op extensies
if(($extension != "jpg") && ($extension != "jpeg") && ($extension != "gif") && ($extension != "png")) {
$resultaat[] = 'Bestand(en) is geen image!<br /><br />';
}
//filepath aanmaken
elseif ($tmpfilepath != ""){
//nieuwe filepath aanmaken
$newfilepath = "./images/thumbs/" . $_FILES['upload']['name'][$i];
//Upload file naar definitive map
if(move_uploaded_file($tmpfilepath, $newfilepath)) {
//evt echo's
$resultaat[] = 'Bestand(en) successvol geupload!<br /><br />';
}
else {
$resultaat[] = 'Er is iets fout gegaan met uploaden! Probeer opnieuw';
}
}
}
}
} // eind ['REQUEST_METHOD']
echo implode(array_unique($resultaat));
?>
<!-- De form -->
Klik op browse om bestanden te uploaden<br /><br />
<form action="" method="post" enctype="multipart/form-data">
<input type="hidden" name="maxsize" value="5000000"> <!-- max 5 Mb groot -->
<input name="upload[]" type="file" multiple="multiple" />
<input type="submit" value="Upload Bestanden">
<!-- De images -->
<div id="wrapper" style="width: 550px">
<?php
// de geuploade images gelijk tonen op pagina
$show_images = opendir(dirname(realpath(__FILE__)).'/images/thumbs/');
while($file = readdir($show_images)){
if($file !== '.' && $file !== '..'){
echo '<img src="images/thumbs/'.$file.'" style="padding:5px;" />'; // images 5px uit elkaar
}
}
?>
</div>
</body>
</html>
Login of Registreer om te reageren.
Reacties
Die hidden input voor de filesize is wel heel erg makkelijk te omzeilen en ik kan zo (de default) 100 mb uploaden :P
Je voorbeeld toont geen thumbs maar de volledige (geschaalde) image, dit komt omdat er geen thumbs gemaakt worden, dit doe je namelijk met imagecreatefromjpeg en de broertjes van deze function voor gif en png.
Je kunt dan ook de kwaliteit van de images beinvloeden en dus de filesize knijpen voor de thumbs.
ook kun je voor de controle van de extentie een array gebruiken zodat de klant redelijk simpel zelf een nieuwe filetyp kan toevoegen Dit zijn maar even de puntjes die ik zo snel zie die verbetering kunnen gebruiken.
Ook zou je een javascriptje kunnen toevoegen die een nieuwe file-input in het form pleurt zodra er er geen empty fileinput meer is in het form.
Edit, hmm weird, als ik bovenstaande post maakt, kon ik niet scrollen in het inputveld, in edit-mode wel ?
Ik heb mezelf ooit een keer proberen te verdiepen in OOP, en dit was mijn eerste ding (is dus bagger zoals het groot is, maar het gaat om het idee (van resizen), misschien kun je er iets mee...
Edit
Als het goed is werkt nu de scroll functie maar laat aub weten als een en ander nog niet goed functioneert.
Wat betreft de inhoud van post hierboven: ik ga me daar eens over buigen. Is voor mij interessant en leerzaam
Overigens ik zit nu zelf op FF dit te typen
Hieronder de css die ik erbij heb gezet: Ik type nog even verder en voeg een snapshot toe van deze post zodat je kunt zien dat ik momenteel een scrollbalk voor mijn neus heb:
Als je gewoon wat meer padding geven in de textarea en je kan de scroll weghalen.
Daarna heb je iets veranderd, en toen kon ik nog niet scrollen, maar dat was niet meer nodig want het groeide mee.
Nu groet het mee en kan ik scrollen, het is dus wel beter maar nog niet perfect :P
Persoonlijk zou ik het ook handiger vinden als de input gewoon te scalen is met de muis, wat nu niet gaat.
soit, het werkt allemaal wel hoor, maar zo heb je iets te doen
edit, in edit modus kan ik WEL scalen met de muis en groeit het textveld niet mee..vage shizzle :P
Nu geef ik die in de css dit mee: Maar naar dat resizen in y luister ie niet...
En die "element.style" in de console die ik zie die heeft de overflow: hidden bij zich maar die kan ik op geen enkele manier overschrijven...
Edit:
Aha; gevonden: probleem was de max-heigth, die blokkeerde de resize textarea in y richting. Als goe dis kun je de textarea in beide richtingen resizen nu.