2017-03-27 3 views
0

J'essaie faire télécharger pour Jackrabbit mais le téléchargement de fichier zip est corrompufichiers zip avec Jackrabbit

Les dépendances de Maven:

<dependency> 
     <groupId>org.apache.jackrabbit</groupId> 
     <artifactId>jackrabbit-jcr2dav</artifactId> 
     <version>${jackrabit.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>javax.jcr</groupId> 
     <artifactId>jcr</artifactId> 
     <version>${javax.jcr.version}</version> 
    </dependency> 

code du téléchargement:

isRollback = compactaFile(IOUtils.toInputStream(dmls.get(1)), rollbackFileNamesql , rollbackFileName); 
     getThreadParam().jackRabbitUtil.upload(path, 
      rollbackFileName, 
      isRollback); 

private InputStream compactaFile(InputStream dml, String fileName, String tmpFileName) throws Exception{ 
    byte[] buffer = new byte[1024]; 
    try{ 


     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     ZipOutputStream zout = new ZipOutputStream(baos); 
     ZipEntry ze= new ZipEntry(fileName); 
     zout.putNextEntry(ze); 
     int len; 
     while ((len = dml.read(buffer)) > 0) { 
      zout.write(buffer, 0, len); 
     } 
     dml.close(); 

     zout.closeEntry(); 
     zout.finish(); 
     zout.close(); 
     baos.flush(); 
     baos.close(); 
     ByteArrayInputStream ios = new ByteArrayInputStream(baos.toByteArray()); 
     return ios;    
    }catch(Exception e){ 
     throw e; 
    } 
} 


public synchronized void upload(String filePath, String fileName,InputStream content) throws Exception { 
    if (StringUtils.isBlank(filePath)) { 
     throw new Exception("O caminho para upload do arquivo nao foi informado."); 
    } 

    if (StringUtils.isBlank(fileName)) { 
     throw new Exception("O nome do arquivo para upload nao foi informado."); 
    } 

    if (content == null) { 
     throw new Exception("O conteudo do arquivo para upload nao foi informado."); 
    } 
    Session session = getSession(); 
    Node root = session.getRootNode(); 
    String[] folders = filePath.split(File.separator); 
    Node uploadNode = null; 
    VersionManager versionManager = session.getWorkspace().getVersionManager(); 
    String path = ""; 

    for (String folder : folders) { 
     if (!StringUtils.isBlank(folder)) { 
      if (!root.hasNode(folder)) { 
       root.addNode(folder, "nt:folder"); 
       uploadNode = root.getNode(folder); 
       uploadNode.addMixin("mix:versionable"); 
       session.save(); 
      } 
      uploadNode = root.getNode(folder); 
      path += File.separator + uploadNode.getName(); 
      versionManager.checkout(path); 
      root = uploadNode; 
     } 
    } 

    if (uploadNode != null && !uploadNode.hasNode(fileName)) { 
     Node nodefile = uploadNode.addNode(fileName, "nt:file"); 
     nodefile.addMixin("mix:versionable"); 
     final Node resource = nodefile.addNode("jcr:content", "nt:resource"); 
     Binary value = session.getValueFactory().createBinary(content); 
     resource.setProperty("jcr:data", value); 
     session.save(); 
     versionManager.checkin(path); 
    } 

} 

Il est télécharger le fichier zip à jackrabbit, mais quand je télécharge le fichier c'est corrompu

+0

Vous semblez pouvoir convertir un flux binaire en texte ASCII, puis revenir à un flux binaire sans perdre d'informations? –

+0

J'ai oublié de supprimer ces lignes de conversion en ASCII. Mais quoi qu'il en soit, continuez à télécharger le fichier zip corrompu – aliel

Répondre

1

était la version de jackrabbit qui était sur 2.15.1 et le serveur était sur 2.10.1, je suis passé à la version 2.13 et cela a fonctionné

+0

N'utilisez pas les versions mineures impaires de Jackrabbit, sauf si vous devez le faire. Ce sont des versions "instables". La dernière version stable est 2.14.0. Voir http://jackrabbit.apache.org/jcr/downloads.html –

0

C'est probablement parce que vous ne fermez pas un de vos flux.