如何使用Liferay将多个文件下载为zip文件?

时间:2017-10-17 18:16:24

标签: java jquery jsp liferay-6

问题陈述

我正在使用"多个文件下载"在Liferay平台内的文档和媒体portlet中运行。但是,它会单独下载所有文件。

我正在使用Liferay 6.1。

问题

我想修改功能,这样当我选择多个文件并单击下载功能时,它会将所有这些文件作为单个zip文件下载。这可能吗?如果是这样的话会怎样实现呢?

更新

我试图部署一个liferay-hook,但我得到了建立失败。

来源:

http://www.surekhatech.com/blog/multiple-file-download-for-liferay-documents-and-media-display-portlet

我不想覆盖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>

1 个答案:

答案 0 :(得分:1)

你的问题非常广泛且非特异性。您没有说明您正在使用的Liferay门户版本,您尝试过的内容等等。所有这些信息都将帮助我们为您提供更好的答案。

从我收集到的内容,您正在使用Liferay文档库中的多文件下载选项。 Liferay门户网站不提供将多个文件作为开箱即用的zip包下载的方法。当Liferay不提供开箱即用的东西时,你通常需要编写Java钩子来覆盖和扩展功能。

然而....

这个钩子已经由一家名为Surekha technologies的公司开发。它可以从Liferay市场免费下载。

https://web.liferay.com/marketplace/-/mp/application/36077428

  

它指出其中一个主要好处是“以ZIP格式捆绑以减少下载量”

您可以通过门户网站中的marketplace service portlet下载它,也可以下载部署文件并自行部署。