Récupérer le fichier du noeud de fichier JCR
J'ai le code suivant pour insérer "rose.gif" dans un roseNode. Mais comment puis-je récupérer le fichier à partir du référentiel?
Node roseNode = session.getRootNode().getNode("wiki:encyclopedia/wiki:entry[1]/");
File file = new File("rose.gif");
MimeTable mt = MimeTable.getDefaultTable();
String mimeType = mt.getContentTypeFor(file.getName());
if (mimeType == null) mimeType = "application/octet-stream";
Node fileNode = roseNode.addNode(file.getName(), "nt:file");
System.out.println( fileNode.getName() );
Node resNode = fileNode.addNode("jcr:content", "nt:resource");
resNode.setProperty("jcr:mimeType", mimeType);
resNode.setProperty("jcr:encoding", "");
resNode.setProperty("jcr:data", new FileInputStream(file));
Calendar lastModified = Calendar.getInstance();
lastModified.setTimeInMillis(file.lastModified());
resNode.setProperty("jcr:lastModified", lastModified);
//retrieve file and output as rose-out.gif
File outputFile = new File("rose-out.gif");
FileOutputStream out = new FileOutputStream(outputFile);
source d'informationauteur Steve
Vous devez vous connecter pour publier un commentaire.
La seule chose que vous avez vraiment besoin de faire est d'obtenir le nom du fichier à partir du nom de la "nt:le fichier" nœud, et le contenu du fichier dans la "rjc:" données de propriété sur le "rjc:contenu" nœud enfant.
RJC 1.0 et 2.0 diffèrent un peu dans la façon dont vous obtenez le flux pour le binaire "rjc:" données de la valeur de la propriété. Si vous utilisez des RJC 1.0, le code devrait ressembler à ceci:
Si vous utilisez des RJC 2.0, la dernière ligne est un peu différent parce que vous devez d'abord obtenir l'objet Binaire de la valeur de la propriété:
Vous pouvez ensuite utiliser Java standard de flux utilitaire pour écrire les octets du contenu de flux dans le fichier.
Lorsque vous en avez terminé avec le Binaire de l'objet, assurez-vous d'appeler le Binaire du
dispose()
méthode de signal dire que vous avez terminé avec le Binaire et que la mise en œuvre peut libérer toutes les ressources acquises par l'objet Binaire. Vous devriez toujours le faire, même si certains RJC implémentations essayer de rattraper des erreurs de programmation en retour d'un ruisseau qui, lorsqu'il est fermé, appeler automatiquementdispose()
pour vous.