IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Uploader une image sur le serveur du site


Sujet :

JavaScript

  1. #1
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut Uploader une image sur le serveur du site
    Bonjour tout le monde,

    J'ai un formulaire avec un input=file qui est sensé envoyer une image du client au serveur.
    Je pensai enregistrer l'image dans un dossier image, et l'adresse de l'image en base de donnée.

    J'ai tester l'affaire, en récupérant côté serveur ce que le client envoie pour le mettre telle quelle en base de donnée.
    Ce qui est enregistrer au final, c'est l'adresse de l'image chez le client (ce qui ne m’intéresse pas du tout).

    Donc je pense qu'il y a déjà un problème côté client.
    Ma question est: comment fait t'on pour mettre une image dans un contenant javascript?
    (Exemple: chaîne de caractères)

    Merci de votre aide.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par Pecose Voir le message
    ...Je pensai enregistrer l'image dans un dossier image, et l'adresse de l'image en base de donnée...
    1- C'est LA bonne idée, en effet.

    2- Pour le reste... il faut montrer ton code : formulaire + traitement.


    3- Question bonus : POURQUOI le faire via JavaScript ? (et pas "classiquement" en PHP ?)

  3. #3
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Pour le reste... il faut montrer ton code : formulaire + traitement.
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <form id="article" >
    	<div class="container-fluid" >
    		<div class="col-xs-12 offset-xs-0 col-sm-10 offset-sm-1 col-md-8 offset-md-2 col-lg-6 offset-lg-3 jumbotron" >
    			<h4 class="text-center" >- Ajoutez un Article -</h4> 
    			<hr/>
    			<label class="col-3" >Image:</label> 
    			<input class="col-8" type="file" id="image" required />
    			<hr/>
    			<label class="col-3" >Titre:</label> 
    			<input class="col-8" type="text" id="title" required />
    			<br/><br/>
    			<textarea id="text" rows="10" class="col-12" placeholder="Notez ici le contenu de l'article." required />
    			<hr/>
    			<input class="col-4 offset-4" value="Envoyer" type="submit" />
    		</div>
    	</div>
    </form>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $(document).on('submit', '#article', function() {
    	var article = [$('#image').get(0).value, $('#title').get(0).value, $('#text').get(0).value];
    	Server.add("articles", "message", article);
    });
    Mon problème ce trouve dans la variable article.

    Citation Envoyé par jreaux62 Voir le message
    3- Question bonus : POURQUOI le faire via JavaScript ? (et pas "classiquement" en PHP ?)
    Parce que l'image se trouve chez le client.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  4. #4
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $(document).on('submit', '#article', function() {
    	var file = $('#image').file[0];
    	if (file.name.match('\.pdf')) {
    		var reader = new FileReader();
    	  	reader.onloadend = function(e){
    	  		$('section').html(e.reader.result);
    	  	}
    		reader.readAsDataURL(file);
      	}
    });
    J'ai fait ça mais ça ne marche pas.
    "$('section').html" fonctionne mais "e.reader.result" ne retourne rien.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 048
    Points : 44 562
    Points
    44 562
    Par défaut
    Bonjour,
    e.reader.result contient les datas de ton fichier, qui varient suivant le type de fichier lu, les mettre en tant que html pour une image n'a pas de sens, il faut le mettre en tant que qu'attribut src d'une balise <img>.

    Une façon de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function previewImage(file) {
      const input = file.target;
      const reader = new FileReader();
      reader.onload = function() {
        const dataURL = reader.result;
        const output = document.getElementById('output');
        output.src = dataURL;
      };
      reader.readAsDataURL(input.files[0]);
    }
    Ressource :
    L'objet FileReader

  6. #6
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut
    Non c'est pas du tout ce que je veux faire, j'ai fait n'importe quoi.
    En fait je veux sérialiser l'image au final.
    J'ai encore tester ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var image = new Image();
    image.src = $('#image').get(0).value; 
    var base64 = window.atob(image);
    $('section').html(image);
    Evidemment ça ne marche toujours pas.
    Je me demande même si c'est possible.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 048
    Points : 44 562
    Points
    44 562
    Par défaut
    Je ne vois toujours pas ce que tu essaies de faire, as tu testé le code fourni ?

    PS : avant d'utiliser des méthodes, renseigne toi sur ce qu'elles font !

  8. #8
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut
    Je voudrai transformer une image en chaîne de caractères.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  9. #9
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 048
    Points : 44 562
    Points
    44 562
    Par défaut
    Maintenant c'est l’intérêt que je ne vois pas mais bon ...

    En repartant du code que je t'ai fourni
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function previewImage(file) {
      const input = file.target;
      const reader = new FileReader();
      reader.onload = function() {
        const dataURL = reader.result;
        const output = document.getElementById('output');
        // récup. de l'image sous forme texte
        const textImage = window.atob(dataURL.split(",")[1]);   
        // affiche l'image
        output.src = dataURL;
      };
      reader.readAsDataURL(input.files[0]);
    }
    Après chargement la variable dataURL contient quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data:image/png;base64,iVBORw0KGgoAAAANSUhEUg ... et la suite
    le fait de « splitter » nous renvoie quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const data = [
        "data:image/png;base64",
        "iVBORw0KGgoAAAANSUhEUg ... et la suite"
    ];
    on garde le deuxième élément du tableau et on le converti avec, effectivement, window.atob.

    A toi d'en faire ce que tu veux après !

  10. #10
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 335
    Points : 715
    Points
    715
    Par défaut
    Bonjour,
    Citation Envoyé par Pecose Voir le message
    Ce qui est enregistrer au final, c'est l'adresse de l'image chez le client (ce qui ne m’intéresse pas du tout).
    Si on fait un formulaire comme ceci :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php var_dump($_GET,$_POST,$_FILES);?>
    <form>
    <input type="file" name="photo">
    <input type="submit">
    </form>
    Tout ce qu'on aura, c'est le nom du fichier en GET.

    Il est impossible de ne pas trouver un exemple fonctionnel d'envoi de fichier sur un moteur de recherche pour un formulaire standard.
    Sauf peut-être si on cherche avec comme mots clés "maison, cuisine, film...".
    Mais avec "html form file", ça devrait le faire.

    De même, si on a besoin d'ajax, Jquery ou autre, la question a été résolue et la solution publiée à maintes reprises.

    Ensuite par rapport à la conversion en chaîne de l'image, il serait possible par exemple d'affecter le résultat à un champ caché et de récupérer l'image en POST.
    C'est toujours intéressant de tester ça, mais ce n'est généralement pas ainsi qu'on procède, à moins d'un besoin particulier ?

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Toujours pas résolu ?

    Comme disait Loralina les scripts complets ne manquent pas. Il y a ce module d'upload par exemple avec de nombreux formulaires prêt à l'emploi et qui dispose de fonctionnalités intégrées avancées : retour d'information en temps réel, surpasse les limites php serveur, reprise d'upload...

    Cela ne te prendras que quelques minutes pour le tester si tu utilises php côté serveur car il suffit de poser le dossier sur le serveur pour faire les premiers tests. Côté client c'est du javascript, il y a aussi des exemples pour faire des recadrages d'images avant upload, etc.

  12. #12
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut
    Désolé, je bossais sur autre chose.
    Merci de votre aide.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. upload une image sur le serveur
    Par S_ami dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 04/09/2010, 08h56
  2. Comment uploader une image sur son propre serveur avec l'éditeur nicedit ?
    Par Alexandrebox dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/04/2009, 13h01
  3. [Upload] comment copier une image sur le serveur ?
    Par bylka dans le forum Langage
    Réponses: 19
    Dernier message: 20/11/2008, 15h57
  4. [Upload] Uploader une image sur serveur
    Par josémaria dans le forum Langage
    Réponses: 17
    Dernier message: 30/10/2006, 22h11
  5. uploader une image sur le serveur
    Par kespy13 dans le forum Langage
    Réponses: 5
    Dernier message: 07/04/2006, 20h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo