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