Aller au contenu

Upload d'image


Sujets conseillés

Posté

hello,

Y aurait-t-il une solution pour bloquer l'upload d'image, limité par exemple à 500Ko, avant que celle-ci ne soit envoyée sur le serveur?

ciao a tutti!

:wacko:

Posté

ok, mais le fichier est-il bloquer avant l'upload ou après celui-ci?

C'est surtout pour une econnomie de bande passante...

merci ;)

Posté

Je corrige le tir, mon post précédent était faux :(

Tu dois pouvoir arriver à déterminer la taille du fichier en JavaScript, et mettre ce code dans une fonction appelée lors du submit du formulaire.

Je dois pouvoir mettre la main sur un bout de code ;)

Dan

Posté
Je corrige le tir, mon post précédent était faux :(

Tu dois pouvoir arriver à déterminer la taille du fichier en JavaScript, et mettre ce code dans une fonction appelée lors du submit du formulaire.

Je dois pouvoir mettre la main sur un bout de code ;)

Dan

<{POST_SNAPBACK}>

ok, mais le javascript est coté client donc il est possible de passer outre.. non?

Posté

Décidément... je répond à côté. JavaScript ne peut pas tester la taille d'un fichier pour des raisons de sécurité.

Il peut tester la taille de la page courante et de ses images, donc tu devrais pouvoir afficher l'image et en faire calculer la taille par JavaScript.

function calculate()
{
if (!document.fileSize)
{
 alert('Votre navigateur ne supporte pas filesize.');
 return;
}
var size = (document.fileSize)*1;
var y = document.images;
var imglength = 0;
for (i=0;i<y.length;i++)
{
 imglength += (y[i].fileSize)*1;
}
var total = size + imglength;
var writestring = 'Taille fichier HTML: ' + size;
writestring += '\nTaille des images: ' + imglength;
writestring += '\nTaille totale: ' + total;
if (total > 512000) writestring += "\nFichier trop volumineux!";
alert(writestring);
}

En ne testant que les images, tu peux déterminer la taille de celles-ci .

Posté

Le problème est que ton code ne peut s'exécuter que du côté client, parce que toute exécution du côté serveur suppose le téléchargement a priori du fichier. Pas d'autre solution à mon sens. :(

Posté

 <input type='hidden' name='MAX_FILE_SIZE' value='20000'>

Il me semble que mettre ça dans le formulaire, juste avant le balise input type="file" permet de bloquer le transfert si le fichier demandé est trop gros...

A vérifier mais il semble que ça marche... à peu pres ;)

Posté

Je me souviens pour avoir essayé ce code qu'il ne marchait pas sur tous les navigateurs... mais ma mémoire me joue peut-être des tours.

Dan

Posté
C'est déjà un premier pas non Dan ? ;)

Oui, tout à fait. Mais au moment où j'avais testé cette balise on en était aux versions précédentes des navigateurs (je suis un "vieux :lol: )

Peut-être que cela marche mieux sur la dernière génération ;)

Merci pour ce rafraîchissement de mémoire ;)

Posté

personnellement, j'utilise un script php récupéré je ne sais plus trop où pour faire digerer a ma base de données des milliers de requetes SQL en provenance le plus souvent de feuilles saisies dans excel (vous savez en genealogie, on en stocke des infos ;) )... et il fonctionne a merveille sous firefox et internet explorer (c'est deja pas mal non :P ... par contre, il est bloqué après l'upload puisqu'on le teste en php... :

<?php
function date_mysql($date_saisie){

   //division de la date par rapport au / ou -
   list ($jour , $mois , $an) = split("[-./]",$date_saisie);
   //inverse la date
   if (strlen($mois)==1) $mois = "0".$mois;
   if (strlen($jour)==1) $jour = "0".$jour;
   return($an."-".$mois."-".$jour);
}

$bouton = @$_POST['bouton'];

if(!empty($bouton)){
$fichier = $_FILES['fichier']['name'];
$size = $_FILES['fichier']['size'];
$tmp = $_FILES['fichier']['tmp_name'];
$type = $_FILES['fichier']['type'];
$error = $_FILES['fichier']['error'];
$max = 1000000;
if(isset($fichier)) {
 if($size <= $max) {
  //information sur le fichier
  echo 'Nom d\'origine =>'.$fichier.'<br />';
  echo 'Taille =>'.$size.'<br />';
  echo 'Nom sur le serveur =>'.$tmp.'<br />';
  echo 'Type de fichier =>'.$type.'<br />';
  echo 'Code erreur =>'.$error.'<br />';
  // traitement a faire
  [...]
 } else {
  echo 'Le fichier est trop volumineux';
 }
}
else {
 echo 'aucun fichier envoyé';
}
}?>
<form enctype="multipart/form-data" action="moulinette.php" method="post">
<input name="fichier" type="file">
<input type="submit" value="send" name="bouton">
</form>

Posté

c'est une bonne question posée là. Je cherche moi-même à écrire un script d'upload de fichiers en PHP mais je suis débutant. Je vais suivre ce sujet avec attention :)

Posté

Pour le code que tu proposes :

if(isset($fichier)) {

Tu devrais tester la valeur de $_POST['fichier'] avant d'allouer les autres variables. C'est inutile de leur allouer des valeurs que tu 'sais' fausses par la suite ;)

D'ailleurs, tu devrais tester la présence du fichier, puis son poids, et virer le fichier si celui ci est trop gros, avant de commencer quoi que ce soit.

Posté

le fichier est viré automatiquement si je ne demande pas par la suite de le recopier quelque part (ce qui est le cas si le fichier est trop volumineux):

The file will be deleted from the temporary directory at the end of the request if it has not been moved away or renamed.

donc a la fin de ma transaction web, *pouf* plus de fichier !

pour garder un fichier sur le serveur il faut utiliser la fonction : move_uploaded_file

par contre pour l'inutilité d'allouer les variables, je suis d'accord

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...