You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users-fr@cocoon.apache.org by Daniel Hertz <da...@shaw.ca> on 2005/12/04 23:30:46 UTC

Problème avec Flowscript et renameTo()

Bonjour,

J'ai une problème se déplacer l'image avec ce Flowscript. Je m'excuse, 
mais, je ne connais pas beaucoup de Java nis Javascript. Merci pour 
votre aide!

Daniel

== Mon flowscript (la base est samples/forms/flow/upload_example.js) ==


importPackage(Packages.java.io);
importPackage(Packages.java.util);
importPackage(Packages.java.sql);

cocoon.load("resource://org/apache/cocoon/forms/flow/javascript/Form.js");

function upload() {
     var form = new Form("forms/upload_model.xml");
   var k = form.showForm("upload-display-pipeline");

   k.invalidate();

   cocoon.sendPage("upload-success-pipeline.jx",
       {
           uploadContent: handleUpload(form),
           username: form.lookupWidget("user").getValue(),
           filename: 
form.lookupWidget("upload").getValue().getHeaders().get("filename")
       }
   );
}

function handleUpload(form) {

 var buf = new java.lang.StringBuffer();

 var uploadWidget = form.lookupWidget("upload");
 if (uploadWidget.getValue() != null) {
   var stream = uploadWidget.getValue().getInputStream();
   var reader = new java.io.BufferedReader(new 
java.io.InputStreamReader(stream));
   var line;
   while ((line=reader.readLine())!=null)
     buf.append(line).append("\n");
     // File (or directory) to be moved
   var f = new java.io.File(new java.io.File(reader));
     // Destination directory
   var dir = new java.io.File(new java.io.File("C:/Uploads/NewDirectory"));
     // Move file to new directory
   var success = f.renameTo(new java.io.File(dir, f.getName()));
   if (!success) {
       // File was not moved
   }
   reader.close();
     }
   return buf.toString();

     }

---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Problème avec Flowscript et renameTo()

Posted by Sylvain Wallez <sy...@apache.org>.
Daniel Hertz wrote:
> Sylvain Wallez wrote:
>> Et si vous utilisez Cocoon 2.1.8:
>>
>>  uploadWidget.getValue().copyToFile("blah");
>>
>> Sylvain
>
> Super-bon! Merci à tous pour vos suggestions et code!
>
> J'ai fais:
>
> importPackage(Packages.java.io);
> importPackage(Packages.java.util);
> importPackage(Packages.java.lang);
>
> cocoon.load("resource://org/apache/cocoon/forms/flow/javascript/Form.js"); 
>
>
> function upload() {
>      var form = new Form("forms/upload_model.xml");
>    var k = form.showForm("upload-display-pipeline");
>
>    k.invalidate();
>
>    cocoon.sendPage("upload-success-pipeline.jx",
>        {
>            uploadContent: handleUpload(form),
>            // username: form.lookupWidget("user").getValue(),
>            filename: 
> form.lookupWidget("upload").getValue().getHeaders().get("filename")
>        }
>    );
> }

C'est bizarre d'appeler handleUpload() dans la construction des 
paramètres de la vue, alors que cette fonction ne renvoie rien.

Ca serait plus clair (à mon avis) de faire:
   var k = form.showForm("upload-display-pipeline");

   k.invalidate();

   handleUpload(form);
   cocoon.sendPage("upload-success-pipeline.jx",
       {
           // username: form.lookupWidget("user").getValue(),
           filename: 
form.lookupWidget("upload").getValue().getHeaders().get("filename")
       }
   );

>
> function handleUpload(form) {
>
>  var buf = new java.lang.StringBuffer();
>  var baseDir = new java.io.File("C:/newdirectory");
>  var userID = cocoon.session.getAttribute("userID");
>  var newDir = new java.io.File(baseDir + java.io.File.separator + 
> userID);
>       var fileName = 
> form.lookupWidget("upload").getValue().getHeaders().get("filename");
>
>  var uploadWidget = form.lookupWidget("upload");
>  if (uploadWidget.getValue() != null) {
>          // test if new directory exists, if not, create it
>       if (!newDir.exists()) {                  newDir.mkdirs();
>       }
>    uploadWidget.getValue().copyToFile(newDir + java.io.File.separator 
> + fileName);
>      }
>      }
>
-- 
Sylvain Wallez                        Anyware Technologies
http://bluxte.net                     http://www.anyware-tech.com
Apache Software Foundation Member     Research & Technology Director


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Problème avec Flowscript et renameTo()

Posted by Daniel Hertz <da...@shaw.ca>.
Sylvain Wallez wrote:
> Et si vous utilisez Cocoon 2.1.8:
>
>  uploadWidget.getValue().copyToFile("blah");
>
> Sylvain

Super-bon! Merci à tous pour vos suggestions et code!

J'ai fais:

importPackage(Packages.java.io);
importPackage(Packages.java.util);
importPackage(Packages.java.lang);

cocoon.load("resource://org/apache/cocoon/forms/flow/javascript/Form.js");

function upload() {
   
    var form = new Form("forms/upload_model.xml");
    var k = form.showForm("upload-display-pipeline");

    k.invalidate();

    cocoon.sendPage("upload-success-pipeline.jx",
        {
            uploadContent: handleUpload(form),
            // username: form.lookupWidget("user").getValue(),
            filename: 
form.lookupWidget("upload").getValue().getHeaders().get("filename")
        }
    );
}

function handleUpload(form) {
 
  var buf = new java.lang.StringBuffer();
  var baseDir = new java.io.File("C:/newdirectory");
  var userID = cocoon.session.getAttribute("userID");
  var newDir = new java.io.File(baseDir + java.io.File.separator + userID);
      
  var fileName = 
form.lookupWidget("upload").getValue().getHeaders().get("filename");
 
  var uploadWidget = form.lookupWidget("upload");
  if (uploadWidget.getValue() != null) {
     
      // test if new directory exists, if not, create it
       if (!newDir.exists()) {        
           newDir.mkdirs();
       }
    uploadWidget.getValue().copyToFile(newDir + java.io.File.separator + 
fileName);
   
    }
   
    }

Daniel

---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Problème avec Flowscript et renameTo()

Posted by Sylvain Wallez <sy...@apache.org>.
Aurélien DEHAY wrote:
> Jean-Christophe Kermagoret wrote:
>> Bonjour,
>> la fonction renameTo() peut ne pas fonctionner quand on travaille sur 
>> des partitions différentes (cf 
>> http://download.java.net/jdk6/doc/api/java/io/File.html#renameTo(java.io.File), 
>> valable aussi pour les versions précédentes du jsdk)).
>>
>> Pour éviter ce problème qui finit par se poser tôt ou tard, tu as 
>> intérêt à réécrire le fichier que tu veux renommer comme je l'ai fait 
>> ici par exemple :
>> http://www.bluexml.org/viewcvs/viewcvs.cgi/cms/src/blocks/core/crud-engine/webapp/feature/form/cud/flow/common-utils.js?rev=1.4&content-type=text/vnd.viewcvs-markup 
>>
>>
>> Regarde la fonction write.
>>
>
> J'avais dû choper ça sur le wiki.... Tu pourrais mettre à jour la 
> partie  qui concerne l'upload de fichier avec ça, je pense que ça 
> pourrait être pas mal, je me souviens avoir pas mal galéré pour 
> trouver ça.

Il y a plus simple:

  var input = uploadWidget.getValue().getInputStream();
  var output = new FileOutputStream("blah");
  org.apache.avalon.excalibur.io.IOUtil.copy(input, output);
  output.close();
  input.close();

Et si vous utilisez Cocoon 2.1.8:

  uploadWidget.getValue().copyToFile("blah");

Sylvain

-- 
Sylvain Wallez                        Anyware Technologies
http://bluxte.net                     http://www.anyware-tech.com
Apache Software Foundation Member     Research & Technology Director


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Problème avec Flowscript et renameTo()

Posted by Aurélien DEHAY <ad...@zorel.org>.
Jean-Christophe Kermagoret wrote:
> Bonjour,
> la fonction renameTo() peut ne pas fonctionner quand on travaille sur 
> des partitions différentes (cf 
> http://download.java.net/jdk6/doc/api/java/io/File.html#renameTo(java.io.File), 
> valable aussi pour les versions précédentes du jsdk)).
> 
> Pour éviter ce problème qui finit par se poser tôt ou tard, tu as 
> intérêt à réécrire le fichier que tu veux renommer comme je l'ai fait 
> ici par exemple :
> http://www.bluexml.org/viewcvs/viewcvs.cgi/cms/src/blocks/core/crud-engine/webapp/feature/form/cud/flow/common-utils.js?rev=1.4&content-type=text/vnd.viewcvs-markup 
> 
> 
> Regarde la fonction write.
> 

J'avais dû choper ça sur le wiki.... Tu pourrais mettre à jour la partie 
  qui concerne l'upload de fichier avec ça, je pense que ça pourrait 
être pas mal, je me souviens avoir pas mal galéré pour trouver ça.

Cdlt.

---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Problème avec Flowscript et renameTo()

Posted by Jean-Christophe Kermagoret <jc...@bluexml.org>.
Bonjour,
la fonction renameTo() peut ne pas fonctionner quand on travaille sur 
des partitions différentes (cf 
http://download.java.net/jdk6/doc/api/java/io/File.html#renameTo(java.io.File), 
valable aussi pour les versions précédentes du jsdk)).

Pour éviter ce problème qui finit par se poser tôt ou tard, tu as 
intérêt à réécrire le fichier que tu veux renommer comme je l'ai fait 
ici par exemple :
http://www.bluexml.org/viewcvs/viewcvs.cgi/cms/src/blocks/core/crud-engine/webapp/feature/form/cud/flow/common-utils.js?rev=1.4&content-type=text/vnd.viewcvs-markup

Regarde la fonction write.

Jean-Christophe


Aurélien DEHAY a écrit :
> Bonjour.
> 
> Je colle ici du code qui fonctionne chez moi(c)(r).
> 
> 
> function uploadFile() {
>     // On récupère le basedir, chemin où déposer le fichier
>     var basedir = cocoon.parameters["realPath"] + 
> cocoon.parameters["contextPath"] + "static/";
>     var urlbase = cocoon.parameters["contextUrl"] + "static/";
> 
>     // On instancie et affiche le formulaire
>     var form = new Form("backend/upload/form-definition.xml");
>     var k = form.showForm("protected-upload-remplir.form");
> 
>     // On récupère le modèle et le nom du fichier a uploader
>     var model = form.getModel();
> 
>     var filename = generateRandomSerial(5);
>     if (model.filename == null || model.filename == "") {
>         filename = filename + "-" + 
> form.lookupWidget("upload").getValue().getHeaders().get("filename");
>     } else {
>         filename = filename + "-" + model.filename;
>     }
> 
>     // Chemin complet du fichier a créer
>     var uploadedFilename = basedir + filename;
> 
>     // Test pour voir si le fichier existe déjà
>     if (new java.io.File(uploadedFilename).exists()) {
> 
>         // Le fichier existe => page d'erreur
>         cocoon.sendPage("protected-upload-file_exists.message", 
> {"filename": filename});
>     } else {
> 
>         // Le fichier n'existe pas, on continue, on vérifie si le
>         // champs upload contient bien quelquechose
>         if ((null != form.lookupWidget("upload")) && (null != 
> form.lookupWidget("upload").getValue())) {
>             // On loggue l'upload
>             myotisLogger("upload du fichier "+filename);
>             // On appelle la fonction de renommage pour mettre le
>             // fichier dans le répertoire d'upload
>             var aPart = form.lookupWidget("upload").getValue();
>             write(aPart, uploadedFilename);
> 
>             var bizData = { "completeFilename": urlbase+filename,
>                             "filename": filename
>             }
>             cocoon.sendPage("protected-upload-confirmer.message", bizData);
>         }
>         // Ici, on devrait peut-être mettre une page d'erreur
>     }
> }
> 
> function write(part, targetFilename) {
>     // Code pour renommer (déplacer) le fichier du dépôt temporaire du
>     // webapp server au fichier indiqué dans le targetFilename
> 
>     // On créé un nouveau fichier contenant l'upload
>     var srcFile = new java.io.File(part);
> 
>     // On créé un nouveau fichier avec pour nom le path du target
>     var targetFile = new java.io.File(targetFilename);
> 
>     // On créé l'arborescence au cas où elle n'existe pas
>     targetFile.getParentFile().mkdirs();
> 
>     // on effectue le renommage
>     srcFile.renameTo(targetFile);
> 
>     // On retourne le chemin du fichier créé
>     return targetFilename;
> }
> 
> Cdlt.


-- 

BlueXML
Jean-Christophe Kermagoret
Directeur associé
jck@bluexml.org


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Problème avec Flowscript et renameTo()

Posted by Aurélien DEHAY <ad...@zorel.org>.
Bonjour.

Je colle ici du code qui fonctionne chez moi(c)(r).


function uploadFile() {
     // On récupère le basedir, chemin où déposer le fichier
     var basedir = cocoon.parameters["realPath"] + 
cocoon.parameters["contextPath"] + "static/";
     var urlbase = cocoon.parameters["contextUrl"] + "static/";

     // On instancie et affiche le formulaire
     var form = new Form("backend/upload/form-definition.xml");
     var k = form.showForm("protected-upload-remplir.form");

     // On récupère le modèle et le nom du fichier a uploader
     var model = form.getModel();

     var filename = generateRandomSerial(5);
     if (model.filename == null || model.filename == "") {
         filename = filename + "-" + 
form.lookupWidget("upload").getValue().getHeaders().get("filename");
     } else {
         filename = filename + "-" + model.filename;
     }

     // Chemin complet du fichier a créer
     var uploadedFilename = basedir + filename;

     // Test pour voir si le fichier existe déjà
     if (new java.io.File(uploadedFilename).exists()) {

         // Le fichier existe => page d'erreur
         cocoon.sendPage("protected-upload-file_exists.message", 
{"filename": filename});
     } else {

         // Le fichier n'existe pas, on continue, on vérifie si le
         // champs upload contient bien quelquechose
         if ((null != form.lookupWidget("upload")) && (null != 
form.lookupWidget("upload").getValue())) {
             // On loggue l'upload
             myotisLogger("upload du fichier "+filename);
             // On appelle la fonction de renommage pour mettre le
             // fichier dans le répertoire d'upload
             var aPart = form.lookupWidget("upload").getValue();
             write(aPart, uploadedFilename);

             var bizData = { "completeFilename": urlbase+filename,
                             "filename": filename
             }
             cocoon.sendPage("protected-upload-confirmer.message", bizData);
         }
         // Ici, on devrait peut-être mettre une page d'erreur
     }
}

function write(part, targetFilename) {
     // Code pour renommer (déplacer) le fichier du dépôt temporaire du
     // webapp server au fichier indiqué dans le targetFilename

     // On créé un nouveau fichier contenant l'upload
     var srcFile = new java.io.File(part);

     // On créé un nouveau fichier avec pour nom le path du target
     var targetFile = new java.io.File(targetFilename);

     // On créé l'arborescence au cas où elle n'existe pas
     targetFile.getParentFile().mkdirs();

     // on effectue le renommage
     srcFile.renameTo(targetFile);

     // On retourne le chemin du fichier créé
     return targetFilename;
}

Cdlt.
-- 
Aurélien

---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org