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. >
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 ?
>> 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 ?
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. >
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...
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. >
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. >
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. >