Java 用jackrabbit压缩文件

Java 用jackrabbit压缩文件,java,inputstream,jackrabbit,zipinputstream,Java,Inputstream,Jackrabbit,Zipinputstream,我正在尝试为jackrabbit上传,但zip文件下载已损坏 maven依赖项: <dependency> <groupId>org.apache.jackrabbit</groupId> <artifactId>jackrabbit-jcr2dav</artifactId> <version>${jackrabit.version}</version> &

我正在尝试为jackrabbit上传,但zip文件下载已损坏

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>

它将zip文件上载到jackrabbit,但是当我下载该文件时,该文件已损坏

它是2.15.1版本的jackrabbit,服务器是2.10.1版本的,我切换到2.13版,它工作了

这可能是因为你没有关闭一个流。

你似乎认为你可以将二进制流转换为ASCII文本,然后再转换回二进制流而不丢失信息?我忘了删除这些转换为ASCII的行。但是无论如何,这将继续上传压缩文件,除非你必须这样做,否则不要使用奇数版本的小版本。这些是“不稳定”的版本。最新的稳定版本是2.14.0。看见
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 );
    }

}