Applet : redimensionnement d'une image avant upload

Soyez le premier à donner votre avis sur cette source.

Vue 15 841 fois - Téléchargée 1 386 fois

Description

Afin de ne pas surcharger le serveur et de diminuer le temps d'upload, voici un applet qui redimensionne les images en local avant des les envoyer au serveur avec une commande POST.
Fonctionne avec les images >7Mo !
Utilisation de la bibliothèque Jakarta/Appache HttpClient
3 fichiers jar sont à télécharger sur le site officiel. (également dans le zip sous des noms simplifiés et sans la doc !)
commons-httpclient-3.1
commons-codec-1.3.
commons-logging-1.1.1

Source / Exemple :


Je mets ici que le PHP et l'HTML de démarrage. L'applet se trouve dans le zip sous forme d'un projet NetBeans.
Voici l'HTML qui permet de démarrer l'applet : 
<HTML>
<HEAD>
   <TITLE>Applet HTML Page</TITLE>
</HEAD>
<BODY>

<H3><HR WIDTH="100%">Image Resizer<HR WIDTH="100%"></H3>

<P>
<APPLET code="ImageResizer/ImageResizerHTTP.class" archive="ImageResizer.jar" width=280 height=300>
<param name="postPage" value="votresiteweb.com/paged'envoi.php">

<!--
Le choix de l'utilisateur sera renvoyé dans la variable $subdirectory
et variables $txt pour les commentaires.
Seul la variable "postPage" doit être renseignée pour que l'applet fonctionne.
Liste des paramètres "facultatifs" :
 --!>
<param name="subdirectory" value = "Album1,maison">
<param name="redirectedPage" value = "merci.php">
<param name="compressionQuality" value="0.85">
<param name="maxOutputWeight" value="800">
<param name="outputWidth" value="1024">
</APPLET>
</BODY>
</HTML>

--------------------------------------------------------------------
Le exemple de fichier PHP associé :
<?php 
//Fonction de test
	if(count($_POST) > 0) { 
	   echo 'Données reçues en POST:'; 
	   foreach($_POST as $v) 
	      echo strrev(utf8_decode($v)).":"; 
	} 
	
else{
echo 'Pas de données recues' ;
}
//Recup fichier
    $tmp_file = $_FILES['file']['tmp_name'];
    // on copie le fichier dans le dossier de destination
    $name_file = strtolower(urldecode( $_FILES['file']['name'] )) ;
    $name_file2 = './galerie/'.$subdirectory.'/'.$name_file.'' ;
echo ' Je recois en parametre, nom '.$_FILES['file']['name'].' commentaires '.$txt.' et nom temp : '.$_FILES['file']['tmp_name'] ;
echo '

' ;
    
if( !move_uploaded_file( $tmp_file , $name_file2 ) )
      {
        exit( 'Impossible de copier le fichier '.$name_file2 ) ; //
//Envoyé un code erreur, autre que 200 à l'applet (ex : code de redirection)
      }
else {
echo  'Fichier mis sur le serveur ! à l adresse : '.$name_file2 ;
}
echo  '</body></html>';
?>

Conclusion :


J'espère résoudre le problème à pas mal de gens ! En particulier sur les serveurs free qui plante pour les fichiers de plus de 700Ko.
N'oublier cette histoire de signature de l'archive pour qu'il puisse accéder au disque dur !

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_bobby68
Messages postés
1
Date d'inscription
samedi 25 septembre 2010
Statut
Membre
Dernière intervention
1 mai 2013
-
Bonjour,
Merci beaucoup pour ce programme, il fonctionne parfaitement.
J'aimerais savoir comment je peut récupérer $name_file2, le nom du fichier image chargé, dans le fichier merci.php.
Merci encore.
twinser
Messages postés
32
Date d'inscription
samedi 13 octobre 2007
Statut
Membre
Dernière intervention
26 janvier 2009
-
Un fichier JAR (ou ZIP) peut contenir des répertoires, si tu ouvres le fichier JAR, tu verra le répertoire "ImageResizer". Pour démarrer un applet, on est obligé de lui montré le fichier exécutable, d'où la ligne de commande. Le fichier JAR doit être mis au même endroit que la page HTML, sinon tu dois préciser la ligne entière "code=http://...".

Apparemment le code que j'ai déposé contient des bugs depuis une mise à jour de la plateforme Java. J'ai fait une correction pour un pote à qui j'avais fait une application dédiée. La solution la plus facile n'est pas dans mon applet mais dans l'HTML 5.
Matyouz
Messages postés
28
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
27 juillet 2011
-
Salut ! Je connais php, flash et javascript ... malheureusement aucune de ces technos ne permet de redimmensionner une image avant son upload sur un serveur. Mon soucis ; c'est que je ne connais vraiment rien en java. Nada ... Je vois qu'une applet est appelée depuis le fichier html :



Comment fais t'on pour obtenir ce fichier "ImageResizerHTTP.class" ? Si j'ai bien compris ce fichier une fois obtenu par je ne sais quelle manipulation (compilation) est placé dans un repertoire "ImageResizer" qui doit lui même etre créé sur le repertoire racine du site (arretez moi si je me trompe).

Quid de ce fichier "ImageResizer.jar" ? Est celui que l'on trouve dans /dist/javadoc/ ? Dois t'on simplement le copier à la racine du site ?

Bref, j'aurais bien besoin d'un petit tutoriel (si ça interesse quelqu'un !)

Merci.
xaviernuma
Messages postés
14
Date d'inscription
dimanche 24 septembre 2006
Statut
Membre
Dernière intervention
28 novembre 2011
-
Bonjour Twinser,

C'est bien dommage que vous ne souhaitiez pas recompiler votre application... elle est fort utile... je n'ai pas trouvé d'application aussi simple a utiliser pour mon site Internet...

Malheureusement, je ne code pas en java... je ne saurais la mettre à jour... Si vous pouviez avoir envie d'y jeter œil, cela serait super.

Merci.
twinser
Messages postés
32
Date d'inscription
samedi 13 octobre 2007
Statut
Membre
Dernière intervention
26 janvier 2009
-
J'ai en effet eu le même problème que j'ai corrigé en passant de 1.5 à 1.6. Si je m'en souvient bien, j'ai mis à jours les bibliothèques apache (org.apache.commons.httpclient) et j'ai resigné mon applet (à partir du code source. Ce n'est qu'une supposition mais j'ai l'impression qu'ils ont renforcé la "sécurité" des applets en bridant un peu plus les connexion HTTP.
("Caused by: java.io.IOException: open HTTP connection").
Bref, ca se résoud sans trop de problème avec le code source et un Netbeans bien configuré. Mais comme j'ai fait cela y'a 2 ans, je n'ai pas la moindre envie de le recompilé. (Dsl).

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.