2015-10-12 2 views
0

Я хочу проверить сохранение и извлечение файлов с помощью Apache Jackrabbit. Я не уверен, что это экономит, когда я не могу получить его позже. Ниже приведен мой код. Мой вопрос: как получить файл, который я сохранил.Jackrabbit file storage

@Test 
public void storeFile() throws Exception { 
    File file = getFile(); 
    FileInputStream fileInputStream = new FileInputStream(file); 

    Repository repository = new TransientRepository(); 
    Session session = repository.login( 
    new SimpleCredentials("username", "password".toCharArray())); 
    try { 
     logger.info("logged in as user '{}'", session.getUserID()); 
     Node root = session.getRootNode(); 

     // Store content 
     Node hello = root.addNode("userid_12"); 
     Node world = hello.addNode("files"); 


     logger.debug("setting fileInputStream"); 
     world.getSession().getValueFactory().createBinary(fileInputStream); 

     session.save(); 

     // Retrieve content 
     Node node = root.getNode("userid_12/files"); 
     logger.info(node.getPath()); 
     //how do I retrieve the file now? 
     } 

ответ

1

Совсем недавно сделал что-то подобное, и использовал страницу примеров (http://wiki.apache.org/jackrabbit/ExamplesPage), чтобы сделать это.

Вы должны сказать Jackrabbit тип узла, а также передавать его двоичные данные и тип пантомимы при экономии, что-то вроде этого:

Node DocNode = currentDocNode.addNode(doc.getFilename(),"nt:file"); 
    Node contentNode = DocNode.addNode("jcr:content","nt:resource"); 
    Binary binary = session.getValueFactory().createBinary(file.getInputStream()); 
    contentNode.setProperty("jcr:data",binary); 
    contentNode.setProperty("jcr:mimeType",file.getContentType()); 
    Calendar created = Calendar.getInstance(); 
    contentNode.setProperty("jcr:lastModified", created); 

Это сохранит документ правильно в узле. Затем извлечение файл просто получить узел и чтение данных, есть класс JcrUtils, что делает это для вас:

Node fileNode = root.getNode("path/to/node"); 
InputStream stream = null; 
if(null != fileNode){ 
stream = JcrUtils.readFile(fileNode); 
} 

Тогда вы можете делать то, что вы, что с InputStream (поток его ответ и т.д.)

+0

спасибо user2294467. – Sonam

Смежные вопросы