Téléchargement et sauvergarde de fichier [Résolu]

Signaler
Messages postés
20
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
16 mai 2008
-
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
Bonjour,

J'aurai voulus savoir si quelqu'un savait comment provoquer en javascript pur le téléchargement depuis le site et la sauvegarde d'un fichier.
Je m'explique; je développe actuellement un site intranet totalement client (-_-), qui génère des fichiers JSON. Actuellement je les sauvegarde dans un emplacement par défaut mais j'aimerai donner la possibilité à l'utilisateur de choisir son chemin d'accès. Puisque j'ai trouver le moyen d'écrire en local un fichier texte sur le disque (IE + mozilla) , soit je lance une fenêtre genre "sauvergarder sous" et je récupère le chemin indiqué, soit je génére le fichier json et je provoque sont téléchargement avec un lien(href="...").
Dans les deux cas j'ai un problème:
- Comment provoquer l'ouverture d'une fenêtre "sauvergarder sous" et comment récupérer le chemin cible
- Comment forcer sous IE le téléchargement d'un fichier (qui actuellement s'ouvre dans le navigateur).

Je vous remercie de vos réponses.
Cordialement,

Ghostwan< Chaque solution cache un probléme. Chaque probléme est un nouveau défi. >

8 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
choix d'un répertoire ?

    avec IE   ==> des explications ici

    avec FF    ?   j'aurais dit file input, choix d'un fichier quelconque ==>
          on en tire le répertoire, mais "pas trés heureux"
          peut-on plus ?   je ne sais pas, mais comme j'ignorais
          qu'on pouvait écrire dans un fichier....
          remarque que les ActiveX peuvent très bien fonctionner sous FF !
          c'est "pas simple", mais ça baigne :  plusieurs liens : ici et ici
             il y en a d'autres... mais ça n'intéresse personne ?

  
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
>> Puisque j'ai trouver le moyen d'écrire en local un fichier texte sur le disque (IE + mozilla )
    en pur javascript ?
    est-ce que tu peux nous donner des infos sur ça ?   comment fais-tu ?


>>Comment provoquer l'ouverture d'une fenêtre "sauvergarder sous"
    en fait, ton souci c'est de provoquer le téléchargement là où IE l'ouvre directement ?
    c'est ça ?

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
20
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
16 mai 2008

Oui, mais je ne doit passé que par des technologie totalement cliente puisque je n'ai pas de serveur. Un fichier json étant du javascript ie me l'ouvre directement dans le navigateur.

Pour l'écriture dans les fichiers textes j'utilise deux fonctions une pour ie et une pour mozilla:
pour ie c'est tout con je passe pas les activeX

var ts = fso.CreateTextFile(filename);
ts.Write(content);
ts.Close()

Pour mozilla je passe par une fonction décrite sur leur site:

/** Sauvergarde, sous Mozilla, d'un texte dans un fichier
    @param {string} content Contenus à sauver
    @param {string} filename Chemin du fichier destination (ex: C:\texte.txt), écraser s'il existe
*/ 
function saveToFileMozilla(content,filename) {
    try {
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    } catch (e) {
        alert("Permission to save file was denied.");
    }
    var file = Components.classes["@mozilla.org/file/local;1"]
        .createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath( filename );
    if ( file.exists() == false ) {
        file.create( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420 );
    }
    var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
        .createInstance( Components.interfaces.nsIFileOutputStream );
    /* Open flags
    #define PR_RDONLY       0x01
    #define PR_WRONLY       0x02
    #define PR_RDWR         0x04
    #define PR_CREATE_FILE  0x08
    #define PR_APPEND      0x10
    #define PR_TRUNCATE     0x20
    #define PR_SYNC         0x40
    #define PR_EXCL         0x80
    */
    /*
    ** File modes ....
    **
    ** CAVEAT: 'mode' is currently only applicable on UNIX platforms.
    ** The 'mode' argument may be ignored by PR_Open on other platforms.
    **
    **   00400   Read by owner.
    **   00200   Write by owner.
    **   00100   Execute (search if a directory) by owner.
    **   00040   Read by group.
    **   00020   Write by group.
    **   00010   Execute by group.
    **   00004   Read by others.
    **   00002   Write by others
    **   00001   Execute by others.
    **
    */
    outputStream.init( file, 0x04 | 0x08 | 0x20, 420, 0 );
    var result = outputStream.write( content, content.length );
    outputStream.close();
}

J'ai regarder ton site (en faite ca fait même 3 jours que je l'épluche), beau boulot! J'ai vu que tu était calé dans la matière, est ce que tu serais comment provoquer l'ouverture d'un file browser pour sauvergarder fichier ou choper l'url d'un emplacement?
< Chaque solution cache un probléme. Chaque probléme est un nouveau défi. >
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
ah ben... si on peut écrire dans un fichier texte avec FF,
    ça ouvre ( enfin ! ) des horizons intéressants !

>>est ce que tu serais comment provoquer l'ouverture d'un file browser
    je ne sais pas si on peut forcer IE ( un navigateur quelconque ) à faire ce qu'on veut.
    on parle souvent de type mime, mais franchement....
       je ne sais pas trop qu'en faire !

    il faudrait changer l'extension du fichier.  
       appelle le ( ou renomme le temporairement par prog )  .zip, .txt ...

    ou alors faire ça totalement avec FileSystemObject ( pour IE )
   
    en fait... je ne vois pas ( je comprend pas ! ) ce qui gène ?
    l'utilisateur dit où il veut mettre, on y écrit le fichier. point barre...
       il y a probablement un truc que je ne suis pas...
      
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
20
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
16 mai 2008

Si tu veut dans la même veine j'ai la copie d'un fichier quelconque en local (donc la lecture et l'ecriture d'une suite de bits avec ie ou firefox) et la lecture d'un fichier texte.
Pour en revenir a mon problème
>>    l'utilisateur dit où il veut mettre, on y écrit le fichier. point barre...
Pour que l'utilisateur indique où il veut écrire son fichier, j'aimerais passé non pas par un champ texte classique mais par un browser comme "save as". Si j'arrive a en ouvrir un avec la balise ou un truc dans le genre, il m'en ouvre un "open" qui ne me permet pas de choisir un dossier et le nom du fichier sous lequel je veut sauver mon mon contenus JSON.

< Chaque solution cache un probléme. Chaque probléme est un nouveau défi. >
Messages postés
20
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
16 mai 2008

Voila j'ai créé une sources avec en plus des fonctions pour manipuler le presse papier
http://www.javascriptfr.com/codes/MANIPULATION-SYSTEME-FICHIER-LOCAL-JAVASCRIPT-IE-MOZILLA_46655.aspx

Bon je vais continuer de chercher pour indiquer ou sauver le fichier, je posterais la technique quand je l'aurais trouvée
< Chaque solution cache un probléme. Chaque probléme est un nouveau défi. >
Messages postés
20
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
16 mai 2008

bon ton idée était bonne, le coup des input en bidouillant le truc je m'en suis sortie, même si je doit créé au préalable un fichier pour pouvoir écrire dedans.

< Chaque solution cache un probléme. Chaque probléme est un nouveau défi. >
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
nickel si tu es parvenu à ce que tu voulais,
et ta source : nickel aussi.
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]