Aller au contenu

Upload d'image


bambino

Sujets conseillés

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

Lien vers le commentaire
Partager sur d’autres sites

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?

Lien vers le commentaire
Partager sur d’autres sites

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 .

Lien vers le commentaire
Partager sur d’autres sites

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. :(

Lien vers le commentaire
Partager sur d’autres sites

 <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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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>

Lien vers le commentaire
Partager sur d’autres sites

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 :)

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

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



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