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 :

[Extention FF] Ecriture/lecture dans le cache de firefox


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 201
    Points : 97
    Points
    97
    Par défaut [Extention FF] Ecriture/lecture dans le cache de firefox
    Bonjour, dans le cadre de la création d'un plugin firefox, je voudrait enregistrer des fichiers dans le cache ou répertoire temporaire de firefox mais je ne trouve pas la commande... pourtant j'ai cherché!

    Je pense que c'est un truc du style ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    firefox//{key}/rep/mon_fichier
    Quelqu'un aurait-il une idée?

    Merci beaucoup

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Bonsoir,

    plugin ou extension ? Attention ce n'est pas pareil. Je suppose que tu parles d'extension.

    Il y a différentes manières de stocker des données de manière persistente avec les extensions de Firefox. Tu as le choix entre :
    • Les préférences de ton extension ; ce que tu y mets s'ajoute au « registre » global des préférences. Attention à ne pas y mettre des données trop lourdes car ça peut ralentir l'exécution de Firefox.
    • Une base de données SQLite.
    • Un fichier que tu places par exemple dans le répertoire chrome/ de ton extension, et que tu peux manipuler avec l'API File.


    Par contre si tu veux vraiment quelque chose de temporaire, je te suggère d'utiliser une Blob URI.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 201
    Points : 97
    Points
    97
    Par défaut
    Bonjour,

    Tout d'abord merci pour ta réponse qui va grandement m'aider...

    Effectivement c'est pour une extention, désolé.

    La solution des préférence ne collera pas a l'usage que je recherche. Je doit stocker des images qui peuvent vite devenir volumineuses

    Créer un répertoire temp dans chrome par contre, c'est ce que je recherche.

    du coup j'ai tenté un truc comme ça :

    Code : 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
    // Transformation du canvas en blob, puis insertion du blob comme fichier jpeg
    (cnvs.toBlobHD || cnvs.toBlob).call(cnvs, function(my_blob) {
    	var r = new FileReader();
    	r.onloadend = function() {
    		var now = new Date();
    		var fileName=now.getTime()+".jpg";	
    		try{
                        OS.File.writeAtomic("chrome://mon_projet/temp/"+idUser+"_"+idTask+"/"+fileName,my_blob , {tmpPath: "chrome://mon_projet/temp/"+idUser+"_"+idTask+"/"+fileName+".tmp"});												   
    		}catch(e){
    			//error
    			log("[writeFile] error "+ e.message + '\n'); 
    		}
    	};
    	r.readAsArrayBuffer(my_blob);
    }, 'image/jpeg');
    }
    mais je récupère cette erreur

    [writeFile] error Value [object Blob] cannot be converted to a pointer

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 201
    Points : 97
    Points
    97
    Par défaut
    En fait je n'arrive pas à trouver la commande qui me permet d'enregistrer mon blob en tant que jpeg dans le répertoire /chrome de mon extension...

    j'ai modifié ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OS.File.writeAtomic("chrome://mon_projet/temp/"+idUser+"_"+idTask+"/"+fileName, new Uint8Array(r.result) , {tmpPath: "chrome://mon_projet/temp/capture"+idUser+"_"+idTask+"/"+fileName+".tmp"});
    c'est mieux mais le chemin est incorect

    du coup j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OS.File.writeAtomic("../"+idUser+"_"+idTask+"/"+fileName, new Uint8Array(r.result) , {tmpPath: "../capture"+idUser+"_"+idTask+"/"+fileName+".tmp"});
    et là l'erreur est accès refusé..

  5. #5
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Voilà un bout de code que j'ai trouvé ici et qui ressemble au tien. La principale différence c'est l'utilisation de OS.Path.

    Code : 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
    (canvas.toBlobHD || canvas.toBlob).call(canvas, function(b) {
            var r = new FileReader();
            r.onloadend = function() {
                // r.result contains the ArrayBuffer.
                var writePath = OS.Path.join(OS.Constants.Path.desktopDir, 'savedImage.png');
                var promise = OS.File.writeAtomic(writePath, new Uint8Array(r.result), { tmpPath: writePath + '.tmp' });
                promise.then(
                    function(aVal) {
                        console.log('succesfully saved image to disk');
                    },
                    function(aReason) {
                        console.log('writeAtomic failed for reason:', aReason);
                    }
                );
            };
            r.readAsArrayBuffer(b);
        }, 'image/png');
    Il est possible que l'API OS.File ne sache pas interpréter les URI commençant par chrome:. Ce n'est qu'une hypothèse.

    D'après la page OS.Path tu peux utiliser la constante OS.Constants.Path.tmpDir dans le dossier temporaire du système d'exploitation. Ça me semble le meilleur emplacement pour ce que tu veux faire (car Firefox n'a pas lui-même de dossier temporaire).

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 201
    Points : 97
    Points
    97
    Par défaut
    Salut
    Je te remercie énormément pour le temps que tu as consacré pour m'aider dans la résolution de mon problème.

    Je viens juste de trouver une solution, qui en fait revient à peu près à la tienne!

    j'ai trouvé un bout de code qui me permet de créer un répertoire dans le profile de l'utilisateur et à partir de là la création de mes images passe sans problème! ouf! je commençai à suer!

    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    logPlugin("[writeDir]"); 
    var file=Components.classes["@mozilla.org/file/directory_service;1"]
    .getService(Components.interfaces.nsIProperties)
    .get("ProfD", Components.interfaces.nsIFile);
     
    file.append("tmp_dir");   // Directory Name
    if( !file.exists() ) {   // If it doesn't exist, create
        logPlugin("[writeFile] doesn't exist, create "); 
        file.create(Components.interfaces.nsIFile.DIRECTORY_TYPE,0664); 
    }
     
    //je récupère le path
    var my_path=file.path;
    logPlugin("[Path] path is "+ my_path); 
     
    //et je l'utilise				
    var promise = OS.File.writeAtomic(my_path+"\\"+fileName, new Uint8Array(r.result) , {tmpPath: my_path+"\\"+fileName+".tmp"});
     
    promise.then(
       function(aVal) {
          logPlugin("[writeFile]  succesfully saved image to disk "+ filename);
       },
       function(aReason) {
          logPlugin("[writeFile]  failed for reason: "+ aReason);
       }
    );
    En tous cas merci encore!

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 201
    Points : 97
    Points
    97
    Par défaut
    J'ai crié victoire un peut rapidement...

    J'arrive donc à créer mon répertoire et son contenu (fichiers jpeg) par contre pour la lecture c'est une autre histoire !

    Je tente de parcourir ce répertoire et créer un zip de son contenu, et ça c'est pas gagné..

    Voici ce qu j'ai fait

    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    globalZip = new JSZip();
     
    var dirName = "capture"+idUser+"_"+idTask;
    var my_file=Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile);
    my_file.append("tmp_cpture");   // Directory Name
    my_file.append(idUser+"_"+idTask);   // Directory Name
     
    logPlugin("[doUpload]my_file leafName "+my_file.leafName);
    var entries = my_file.directoryEntries;
    while (entries.hasMoreElements()) {
       var subFile = entries.getNext();
       subFile.QueryInterface(Components.interfaces.nsIFile);
       logPlugin("[doUpload] leafName "+subFile.leafName);
       var aStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
       var response = "";
       var fstream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
       var sstream = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
       fstream.init(subFile, -1, 0, 0);
       sstream.init(fstream);
       var str = sstream.read(4096);
     
       while (str.length > 0)
       {
          response += str;
          str = sstream.read(4096);
       }
     
       sstream.close();
       fstream.close();	
     
       globalZip.file(subFile.leafName, response, {base64: true, binary: true});
    }
    ça crait bien un zip contenant l'ensemble de mes fichiers jpg mais ceux-ci sont illisibles...


    [EDIT]

    J'ai réussi! je vous donne la réponse (j'ai bien galéré à trouver les infos!) :

    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    globalZip = new JSZip();
    var zipFileName = "capture"+idUser+"_"+idTask+".zip";
    var dirName = "capture"+idUser+"_"+idTask;
     
    var my_file=Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile);
    my_file.append("remote_cpture");   // Directory Name
    my_file.append("capture"+idUser+"_"+idTask);   // Directory Name
    logPlugin("[doUpload]my_file leafName "+my_file.leafName);
    var entries = my_file.directoryEntries;
    while (entries.hasMoreElements()) {//parcours du repertoire
       var subFile = entries.getNext();
       subFile.QueryInterface(Components.interfaces.nsIFile);	     
       logPlugin("[doUpload] leafName "+subFile.leafName);
       //convertion stream en base64
       var contentType = Components.classes["@mozilla.org/mime;1"].getService(Components.interfaces.nsIMIMEService).getTypeFromFile(subFile);
       var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
       inputStream.init(subFile, 0x01, 0600, 0);
       var stream = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
       stream.setInputStream(inputStream);
       var encoded = btoa(stream.readBytes(stream.available()));
       //var img_data = "data:" + contentType + ";base64," + encoded;
     
       globalZip.file(subFile.leafName, encoded, {base64: true, binary: true});
    } 
    var globalBlobContent = globalZip.generate({type:"blob"});
    Et voilà!

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

Discussions similaires

  1. Ecriture/lecture dans port série
    Par adrislas dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 04/04/2011, 00h59
  2. Ecriture / Lecture dans un fichier Caché
    Par liavart dans le forum Général Java
    Réponses: 0
    Dernier message: 04/11/2009, 18h17
  3. Ecriture / lecture dans un tableau
    Par Guillaume M dans le forum Général Python
    Réponses: 11
    Dernier message: 23/09/2009, 02h33
  4. ecriture lecture dans un fichier
    Par maz dans le forum C
    Réponses: 3
    Dernier message: 19/10/2006, 11h21
  5. Ecriture et lecture dans un fichier
    Par laetous dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 23/08/2006, 17h59

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