我正在使用"多个文件下载"在Liferay平台内的文档和媒体portlet中运行。但是,它会单独下载所有文件。
我正在使用Liferay 6.1。
我想修改功能,这样当我选择多个文件并单击下载功能时,它会将所有这些文件作为单个zip文件下载。这可能吗?如果是这样的话会怎样实现呢?
我试图部署一个liferay-hook,但我得到了建立失败。
来源:
我不想覆盖liferay的documents-and-media-display-portlet。
我试图从博客项目中复制粘贴代码。我的view.jsp。
有问题我应该从源代码中获取什么并添加到我的视图中?
我的观点.jsp:
<c:choose>
<c:when test="${fn:length(listFiles) gt 0}">
<div class="lfr-search-container " id="flash-table">
<%
PortletURL actionURL = renderResponse.createRenderURL();
List<DLFileEntry> list = (List<DLFileEntry>) request.getAttribute("listFiles");
DateFormat dateFormat = new SimpleDateFormat("MMM yyyy");
OrderByComparator orderByComparator = OrderByComparatorFactoryUtil.create("DLFileEntry", "modifiedDate", false);
Collections.sort(list,orderByComparator);
%>
<liferay-ui:search-container iteratorURL="<%= actionURL %>" delta="10" emptyResultsMessage="no-documents">
<liferay-ui:search-container-results total="<%= list.size() %>" results="<%= ListUtil.subList(list, searchContainer.getStart(), searchContainer.getEnd()) %>" />
<liferay-ui:search-container-row modelVar="file" className="DLFileEntry">
<%
ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
String pdfUrl = "", excelUrl = "";
String logo ="", vendor="", technology="", productType="", flashType="";
long globalGroupId = GroupLocalServiceUtil.getCompanyGroup(PortalUtil.getDefaultCompanyId()).getGroupId();
if(file.getExtension().equalsIgnoreCase("pdf"))
pdfUrl = "<a target='_blank' href='"+ themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + globalGroupId + StringPool.SLASH + file.getUuid()+"' ><img src='/flash-table-portlet/images/pdf.png' width='20px'/> </a>";
else if(file.getExtension().equalsIgnoreCase("xlsx") || file.getExtension().equalsIgnoreCase("xls") || file.getExtension().equalsIgnoreCase("csv") )
excelUrl = "<a target='_blank' href='"+ themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + globalGroupId + StringPool.SLASH + file.getUuid()+"' ><img src='/flash-table-portlet/images/excel.png' width='20px'/> </a>";
try{
Map<String, Fields> fieldsMap = file.getFieldsMap(file.getFileVersion().getFileVersionId());
for (Fields fields : fieldsMap.values()) {
vendor = fields.get("vendor").getValue().toString().replace("[\"", "").replace("\"]", "");
if(vendor.equalsIgnoreCase("other"))
logo="<strong>other</strong>";
else
logo = "<img src='/flash-table-portlet/images/vendor/"+vendor.toLowerCase()+".gif' style='max-width:120px' />";
technology= fields.get("technology").getValue().toString().replace("[\"", "").replace("\"]", "");
productType = fields.get("producttype").getValue().toString().replace("[\"", "").replace("\"]", "");
flashType = fields.get("flashtype").getValue().toString().replace("[\"", "").replace("\"]", "");
}
}catch(Exception ex){
ex.printStackTrace();
}
%>
<liferay-ui:input-checkbox param="<%= file.getName() %>" cssClass="check"></liferay-ui:input-checkbox>
<liferay-ui:search-container-column-text name='date' cssClass="txt-capitalize width-10" value="<%= dateFormat.format(file.getModifiedDate()) %>" />
<liferay-ui:search-container-column-text name='vendor' cssClass="width-10" value="<%= logo %>" />
<liferay-ui:search-container-column-text name='technology' cssClass="width-10" value="<%= technology %>" />
<liferay-ui:search-container-column-text name='product-type' cssClass="width-12" value="<%= productType %>" />
<liferay-ui:search-container-column-text name='flash-type' cssClass="width-12" value="<%= flashType %>" />
<liferay-ui:search-container-column-text name='model' cssClass="width-25" value="<%= file.getTitle() %>" />
<liferay-ui:search-container-column-text name='executive-summary' cssClass="width-10" value="<%= pdfUrl %>" />
<liferay-ui:search-container-column-text name='excel-file' cssClass="width-10" value="<%= excelUrl %>" />
<script type="text/javascript">
$('.check').click(function() {
<%! List<String> multi_files_urls; %>
$(".check").each(function(){
if($(this).is(":checked")){
<%
FileEntry fileEntry = DLAppServiceUtil.getFileEntry(file.getFileEntryId());
FileVersion fileVersion = fileEntry.getFileVersion();
String queryString = "";
boolean appendFileEntryVersion = true;
boolean useAbsoluteURL = true;
String dlURL = DLUtil.getPreviewURL(fileEntry, fileVersion, themeDisplay, queryString, appendFileEntryVersion, useAbsoluteURL);
multi_files_urls.add(dlURL);
%>
}
});
</script>
</liferay-ui:search-container-row>
<liferay-ui:search-iterator searchContainer="<%= searchContainer %>" paginate="${fn:length(listFiles) ge 10}" />
</liferay-ui:search-container>
</div><br /><br />
</c:when>
<c:otherwise>
<div class="alert alert-warning text-center">
<br /><liferay-ui:message key="no-documents"/><br /><br />
</div>
</c:otherwise>
</c:choose>
答案 0 :(得分:1)
你的问题非常广泛且非特异性。您没有说明您正在使用的Liferay门户版本,您尝试过的内容等等。所有这些信息都将帮助我们为您提供更好的答案。
从我收集到的内容,您正在使用Liferay文档库中的多文件下载选项。 Liferay门户网站不提供将多个文件作为开箱即用的zip包下载的方法。当Liferay不提供开箱即用的东西时,你通常需要编写Java钩子来覆盖和扩展功能。
这个钩子已经由一家名为Surekha technologies的公司开发。它可以从Liferay市场免费下载。
https://web.liferay.com/marketplace/-/mp/application/36077428
它指出其中一个主要好处是“以ZIP格式捆绑以减少下载量”
您可以通过门户网站中的marketplace service portlet下载它,也可以下载部署文件并自行部署。