Question

Je 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);
Était-ce utile?

La solution

La seule chose que vous avez vraiment besoin de faire est d'obtenir le nom du fichier à partir du nom du « nt: fichier » noeud et le contenu du fichier de la propriété: le « JCR « JCR données »: le contenu «nœud enfant.

JCR 1.0 et 2.0 diffèrent un peu dans la façon dont vous obtenez le flux binaire pour le « JCR: données » valeur de la propriété. Si vous utilisez JCR 1.0, le code serait comme ceci:

Node fileNode = // find this somehow
Node jcrContent = fileNode.getNode("jcr:content");
String fileName = fileNode.getName();
InputStream content = jcrContent.getProperty("jcr:data").getStream();

Si vous utilisez JCR 2.0, la dernière ligne est un autre bit parce que vous devez d'abord obtenir l'objet binaire de la valeur de la propriété:

InputStream content = jcrContent.getProperty("jcr:data").getBinary().getStream();

Vous pouvez ensuite utiliser l'utilitaire de flux Java standard pour écrire les octets du flux « contenu » dans le fichier.

Lorsque vous avez terminé avec l'objet binaire, assurez-vous d'appeler la méthode de dispose() du binaire pour dire signal 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 faire cela, même si certaines implémentations RJC tentent d'erreurs de programmation de capture en retournant un ruisseau qui, lorsqu'il est fermé, dispose() appel automatiquement pour vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top