gpt4 book ai didi

java - 下载为具有自定义文件夹类型的 Zip 文件夹

转载 作者:行者123 更新时间:2023-11-29 03:08:10 25 4
gpt4 key购买 nike

当我下载类型不是 cm:folder 的 zip 文件夹时,我得到空的 zip 存档。对于 cm:content 类型的文件夹和文档,它可以正常工作。

更多详情:

在我们的项目中,我们创建了一个自定义文件夹类型,其父级类型为 cm:folder:

<type name="ef:folder">
<title>Parent of all folders</title>
<parent>cm:folder</parent>
<mandatory-aspects>
<aspect>ef:typed</aspect>
</mandatory-aspects>
</type>

问题是,当我按选定文件夹的下载为 Zip 按钮时,我得到空的 zip 文件。它来自ZipDownloadExporter.javastartNode方法:

@Override
public void startNode(NodeRef nodeRef)
{
this.currentName = (String)nodeService.getProperty(nodeRef, ContentModel.PROP_NAME);
path.push(new Pair<String, NodeRef>(currentName, nodeRef));
if (ContentModel.TYPE_FOLDER.equals(nodeService.getType(nodeRef)))
{
String path = getPath() + PATH_SEPARATOR;
ZipArchiveEntry archiveEntry = new ZipArchiveEntry(path);
try
{
zipStream.putArchiveEntry(archiveEntry);
zipStream.closeArchiveEntry();
}
catch (IOException e)
{
throw new ExporterException("Unexpected IOException adding folder entry", e);
}
}
}

由于自定义文件夹的类型为 ef:folder 此检查返回 false:

if (ContentModel.TYPE_FOLDER.equals(nodeService.getType(nodeRef)))

并且文件夹未添加到 zip。

这是一个错误吗(也许正确的解决方案是不仅检查节点的类型而且检查父类型)?

如何在不为自定义文件夹类型创建自定义导出器的情况下修复它?

由于项目限制,无法将文件夹类型更改为 cm:folder。

最佳答案

我不得不解决同样的问题。为了修复它,您确实需要检查 cm:folder 的子类型,因此您需要在此类中包含字典服务。这样做很乏味,但这是我的解决方案:

覆盖 ID 为“createDownloadArchiveAction”的 bean,并将 serviceregistry 引入其中=>

 <bean id="createDownloadArchiveAction" class="org.alfresco.repo.download.CreateDownloadArchiveActionSR" parent="action-executer">
<property name="checkOutCheckInSerivce" ref="checkOutCheckInService"/>
<property name="contentServiceHelper" ref="downloadContentServiceHelper" />
<property name="downloadStorage" ref="downloadStorage" />
<property name="exporterService" ref="exporterComponent" />
<property name="maximumContentSize" value="${download.maxContentSize}" />
<property name="nodeService" ref="nodeService" />
<property name="publicAction" value="false"/>
<property name="transactionHelper" ref="retryingTransactionHelper"/>
<property name="updateService" ref="downloadStatusUpdateService"/>
<property name="serviceRegistry">
<ref bean="ServiceRegistry" />
</property>

在这个新类中,您必须将 serviceregistry 转发给 ZipDownloadExporter =>

private void createDownload(final NodeRef actionedUponNodeRef, ExporterCrawlerParameters crawlerParameters, SizeEstimator estimator)
{
// perform the actual export
final File tempFile = TempFileProvider.createTempFile(TEMP_FILE_PREFIX, TEMP_FILE_SUFFIX);
final MyZipDownloadExporter handler = new MyZipDownloadExporter (tempFile, checkOutCheckInService, nodeService, transactionHelper, updateService, downloadStorage,serviceRegistry, actionedUponNodeRef, estimator.getSize(), estimator.getFileCount());

在此类 MyZipDownloadExporter 中,您现在可以进行子类型检查:

 public void startNode(NodeRef nodeRef)
{
this.currentName = (String)nodeService.getProperty(nodeRef, ContentModel.PROP_NAME);
path.push(new Pair<String, NodeRef>(currentName, nodeRef));
if (this.sr.getDictionaryService().isSubClass((nodeService.getType(nodeRef), ContentModel.TYPE_FOLDER))
{ ....

关于java - 下载为具有自定义文件夹类型的 Zip 文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30935309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com