一些Zip文件在露天通过java代码无法正确提取

时间:2017-01-27 06:15:44

标签: java alfresco alfresco-share alfresco-webscripts

我编写了java代码来解压缩露天的zip文件。 但是通过该代码,一些zip文件无法正确提取。

我还有一个观察,如果我手动解压缩该文件并再次手动创建zip文件,那么它的工作正常并且它成功地在露天网站中提取。

所以我不知道究竟是什么问题。

文件问题或我的代码问题或zip文件问题

任何人都可以帮我解决这个问题...

请参阅下面的日志以获取参考资料......

2017-01-25 12:10:12,069  ERROR [tandf.ingestion.TransformExceptionService] [org.springframework.jms.listener.DefaultMessageListenerContainer#22-1] Unhandled Exception occured in ingestion pipeline:  org.alfresco.error.AlfrescoRuntimeException: 00250134 Exception in Transaction.
    at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:542)
    at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:326)
    at com.ixxus.tandf.service.XmlZipExtractService.lambda$extract$4(XmlZipExtractService.java:235)
    at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:548)
    at 

我正在使用以下代码提取zip文件..

 private void unzipToNode(final String zipFilePath, final NodeRef destinationFolder, final String isbn, final String zipFileNoderef, final String assetType, final NodeRef ingestedNodeRef) throws IOException {

    LOG.debug("Inside : Start :-> unzipToNode, zipFileNoderef : {}", zipFileNoderef);

    String rootDisplayPath = nodeUtils.getDisplayPath(destinationFolder);
    List<NodeRef> folderNodes = new ArrayList<>();

    try (ZipFile zipFile = new ZipFile(zipFilePath); FileInputStream fis = new FileInputStream(zipFilePath); ZipInputStream zipInput = new ZipInputStream(fis);) {

        ZipEntry entry = zipInput.getNextEntry();
        int zipFileSize = zipFile.size();
        LOG.info("{} : zipFileSize from zip api for zipFileNoderef : {}", zipFileSize, zipFileNoderef);
        int zipManualFileCount = 0;

        while (entry != null) {

            zipManualFileCount++;

            LOG.debug("Processing the zip entry : {}, zipFileNoderef : {}", entry.getName(), zipFileNoderef);
            InputStream inputStream = zipFile.getInputStream(entry);

            /** create or get final folder path for current entry */
            NodeRef nodeRef = createOrGetFolderStructure(destinationFolder, entry);
            folderNodes.add(nodeRef);

            String name;

            if (!entry.isDirectory()) {

                name = getFileNameFromEntry(entry);

                /** if zip entry is file, then create and write the new node in validation site */
                createNodeOnValidationSite(nodeRef, name, inputStream, assetType, ingestedNodeRef, rootDisplayPath);
            }

            /** close current entry and fetch next one */
            zipInput.closeEntry();
            entry = zipInput.getNextEntry();
        }

        LOG.info("{} : zipManualFileCount from zip api for zipFileNoderef : {}", zipManualFileCount, zipFileNoderef);

        /** Close the last entry */
        zipInput.closeEntry();
    }

    for(NodeRef folderNode : folderNodes){
        if(nodeUtils.isNodeEmpty(folderNode)){
            LOG.debug("Found empty folder [{}] within .zip [{}]", folderNode, ingestedNodeRef);
            /** if the folder is empty we need to copy all properties to it as well to archive it */
            copyAllProperties(ingestedNodeRef, folderNode, rootDisplayPath, assetType);
        }
    }

    LOG.debug("Inside : End :-> unzipToNode : zipFileNoderef : {}", zipFileNoderef);
}

1 个答案:

答案 0 :(得分:1)

如果要提取zip文件,请尝试使用此代码。

<bean id="importzip" class="org.alfresco.repo.action.executer.ZipActionExecuter" parent="action-executer">
        <property name="nodeService">
            <ref bean="NodeService"></ref>
        </property>
        <property name="contentService">
            <ref bean="ContentService" />
        </property>
        <property name="mimetypeService">
            <ref bean="MimetypeService"></ref>
        </property>
                <property name="fileFolderService">
            <ref bean="FileFolderService"></ref>
        </property>
  </bean>
   <bean id="importzip-messages" class="org.alfresco.i18n.ResourceBundleBootstrapComponent">
       <property name="resourceBundles">
          <list>
             <value>org.alfresco.repo.action.importzip-action-messages</value>
          </list>
       </property>
      </bean>

此外,文件importzip-action-messages.properties:

<config evaluator="string-compare" condition="Action Wizards">
      <action-handlers>
         <handler name="importzip" class="org.alfresco.web.bean.actions.handlers.ImportHandler" />
      </action-handlers>         
</config>

并将以下行添加到... -context.xml,(您可以使用action-services-context.xml)

exec

最后将此行添加到我的web-client-config-custom.xml

then