Использование компонента Liferay.Upload для загрузки нескольких файлов

Разработка пользовательского портлета для загрузки нескольких файлов в Liferay 6.2. Обнаружен компонент Liferay.Upload при просмотре исходного кода Liferay в портлете библиотеки документов по следующему адресу:

https://github.com/liferay/liferay-portal/blob/master/portal-web/docroot/html/portlet/document_library/upload_multiple_file_entries.jsp

Мы хотим повторно использовать этот компонент, но не можем найти документацию по использованию.

  1. Как мы используем компонент Liferay.Upload? Что означает и делает каждый из входов?
  2. Можем ли мы повторно использовать этот Liferay.Upload в нашем пользовательском портлете?
  3. Любая конкретная документация по использованию Liferay.Upload?
  4. Какие-либо уже реализованные портлеты доступны в Интернете с исходным кодом, доступным в Интернете?

Ниже приведена выдержка из использования компонента Liferay Upload:

<aui:script use="liferay-upload">
    new Liferay.Upload(
        {
            boundingBox: '#<portlet:namespace />fileUpload',
            deleteFile: '<liferay-portlet:actionURL doAsUserId="<%= user.getUserId() %>"><portlet:param name="struts_action" value="/document_library/edit_file_entry" /><portlet:param name="<%= Constants.CMD %>" value="<%= Constants.DELETE_TEMP %>" /><portlet:param name="folderId" value="<%= String.valueOf(folderId) %>" /></liferay-portlet:actionURL>&ticketKey=<%= ticket.getKey() %><liferay-ui:input-permissions-params modelName="<%= DLFileEntryConstants.getClassName() %>" />',
            fileDescription: '<%= StringUtil.merge(PrefsPropsUtil.getStringArray(PropsKeys.DL_FILE_EXTENSIONS, StringPool.COMMA)) %>',
            maxFileSize: '<%= PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE) %> B',
            metadataContainer: '#<portlet:namespace />commonFileMetadataContainer',
            metadataExplanationContainer: '#<portlet:namespace />metadataExplanationContainer',
            namespace: '<portlet:namespace />',
            tempFileURL: {
                method: Liferay.Service.bind('/dlapp/get-temp-file-entry-names'),
                params: {
                    groupId: <%= scopeGroupId %>,
                    folderId: <%= folderId %>,
                    tempFolderName: 'com.liferay.portlet.documentlibrary.action.EditFileEntryAction'
                }
            },
            tempRandomSuffix: '<%= EditFileEntryAction.TEMP_RANDOM_SUFFIX %>',
            uploadFile: '<liferay-portlet:actionURL doAsUserId="<%= user.getUserId() %>"><portlet:param name="struts_action" value="/document_library/edit_file_entry" /><portlet:param name="<%= Constants.CMD %>" value="<%= Constants.ADD_TEMP %>" /><portlet:param name="folderId" value="<%= String.valueOf(folderId) %>" /></liferay-portlet:actionURL>&ticketKey=<%= ticket.getKey() %><liferay-ui:input-permissions-params modelName="<%= DLFileEntryConstants.getClassName() %>" />'
        }
    );
</aui:script>

Любые указатели высоко ценятся!


person Ashok Goli    schedule 23.01.2015    source источник


Ответы (4)


Похоже, этот компонент используется повторно во всем в Liferay. Я думаю, вы могли бы использовать его повторно. Я нашел следующие документация исходных параметров. Я надеюсь, что это поможет вам прогрессировать. Удачи!

person Pawel Kruszewski    schedule 28.01.2015

Я попробовал, основываясь на ссылках Павла, и преуспел в своего рода POC.

вид.jsp

<%@page import="com.liferay.portal.kernel.util.ParamUtil"%>
<%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%>
<%@page import="com.liferay.portal.kernel.util.StringPool"%>
<%@page import="com.liferay.portal.kernel.util.PropsKeys"%>
<%@page import="com.liferay.portal.kernel.util.PrefsPropsUtil"%>
<%@page import="com.liferay.portal.kernel.util.StringUtil"%>
<%@ taglib uri="http://java.sun.com/portlet
package com.ashok.liferay.upload;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Map;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;

import com.liferay.portal.kernel.upload.UploadPortletRequest;
import com.liferay.portal.util.PortalUtil;
import com.liferay.util.bridges.mvc.MVCPortlet;

/**
 * Portlet implementation class SingeFileUploadAction
 */
public class SingeFileUploadAction extends MVCPortlet {
  public void uploadFile(ActionRequest actionRequest,
          ActionResponse actionResponse) throws IOException, PortletException {
      System.out.println("In SingeFileUploadAction");
      UploadPortletRequest uploadRequest=PortalUtil.getUploadPortletRequest(actionRequest);
      File file =uploadRequest.getFile("file");
      String fileName = uploadRequest.getFileName("file");
      System.out.println("FileName:"+fileName);
      //Mike Test
      Map<String, String[]> reqMap = actionRequest.getParameterMap();
      System.out.println("Printing all actionRequest Params");
      for (Map.Entry<String, String[]> entry : reqMap.entrySet())
      {
          System.out.println(entry.getKey() + "/" + Arrays.toString(entry.getValue()));
      }

      System.out.println("----------\nPrinting all uploadRequest Params");
      Map<String, String[]> upReqMap =uploadRequest.getParameterMap();
      for (Map.Entry<String, String[]> entry : upReqMap.entrySet())
      {
          System.out.println(entry.getKey() + "/" + Arrays.toString(entry.getValue()));
      }

      System.out.println(file.getName());

  }
  public void uploadSubmit(ResourceRequest resourceRequest,
      ResourceResponse resourceResponse)  {
    System.out.println("In uploadSubmit");
    UploadPortletRequest uploadRequest=PortalUtil.getUploadPortletRequest(resourceRequest);
//    File file =uploadRequest.getFile("file");
//    System.out.println(file.getName());

  }
}
0" prefix="portlet" %> <%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%> <portlet:defineObjects /> This is the <b>Liferay File Upload</b> portlet in View mode. <portlet:actionURL name="uploadFile" var="uploadFileURL" > <portlet:param name="jspPage" value="/html/singefileuploadaction/view.jsp" /> </portlet:actionURL> <portlet:resourceURL var="importPortletURL" id="uploadSubmit"> <portlet:param name="jspPage" value="/html/singefileuploadaction/view.jsp" /> </portlet:resourceURL> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <aui:form action="<%= importPortletURL %>" cssClass="lfr-export-dialog" method="post" name="fm1"> <div class="lfr-dynamic-uploader"> <div class="lfr-upload-container" id="<portlet:namespace />fileUpload"> &nbsp; </div> </div> <div id="<portlet:namespace/>fallback"></div> <aui:button-row> <aui:button cssClass='hide' name="continueButton" type="submit" value="Continue" /> </aui:button-row> <aui:script use="liferay-upload,aui-base"> var liferayUpload = new Liferay.Upload({ allowedFileTypes: '<%= StringUtil.merge(PrefsPropsUtil.getStringArray(PropsKeys.DL_FILE_EXTENSIONS, StringPool.COMMA)) %>', container: '#<portlet:namespace />fileUpload', maxFileSize: <%=Long.parseLong(PrefsPropsUtil.getString(PropsKeys.DL_FILE_MAX_SIZE)) %> / 1024, namespace:'<portlet:namespace />', uploadFile: '<%=uploadFileURL.toString()%>', tempFileRemoved: function(){console.log('Temp File Removed');}, 'strings.dropFilesText': 'Drop Files Here to Upload.', 'strings.dropFileText': 'Drop File Here to Upload.', 'strings.selectFileText': 'Select File to Upload.', 'strings.selectFilesText': 'Select Files to Upload.', 'strings.fileCannotBeSavedText': 'File cannot be saved.', 'strings.pendingFileText': 'This file was previously uploaded but not actually saved', 'strings.uploadsCompleteText': 'Upload is complete. Please save.', multipleFiles: false }); <!-- ASHOK: !IMPORTANT-DO NOT REMOVE-This code is to re-position the Upload Component HTML code which is placed on top of the page by default: Might be a BUG?? --> $( document ).ready(function() { $('.component.liferayupload').appendTo("#<portlet:namespace />fileUpload"); }); var continueButton = A.one('#<portlet:namespace />continueButton'); function toggleContinueButton() { var uploadedFiles = liferayUpload._fileListContent.all('.upload-file.upload-complete'); if (uploadedFiles.size() == 1) { console.log('One file Upload'); console.log(uploadedFiles); continueButton.show(); } else { console.log(uploadedFiles); continueButton.hide(); } } <!-- Ashok: Upload Component Events BEGIN--> <!-- Ashok: Fired when File Upload STARTS--> liferayUpload._uploader.on( 'fileuploadstart', function(event) { console.log('File Upload Start'); } ); <!-- Ashok: Fired when File Upload is COMPLETE--> Liferay.on( 'uploadcomplete', function(event) { console.log('File Upload Complete'); } ); <!-- Ashok: Fired when All Uploads are COMPLETE--> liferayUpload._uploader.on( 'alluploadscomplete', function(event) { console.log('All Uploads Complete'); toggleContinueButton(); } ); <!-- Ashok: Fired when Temp file is REMOVED--> Liferay.on( 'tempFileRemoved', function(event) { console.log('Temp File Removed'); toggleContinueButton(); } ); <!-- Ashok: Upload Component Events END--> $('#<portlet:namespace />continueButton').on( 'click', function(event) { event.preventDefault(); $('#<portlet:namespace />fm1').ajaxSubmit( { success: function(responseData) { <%-- $('#<portlet:namespace />exportImportOptions').html(responseData); --%> } } ); } ); </aui:script> </aui:form>

SingeFileUploadAction.java

package com.ashok.liferay.upload;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Map;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;

import com.liferay.portal.kernel.upload.UploadPortletRequest;
import com.liferay.portal.util.PortalUtil;
import com.liferay.util.bridges.mvc.MVCPortlet;

/**
 * Portlet implementation class SingeFileUploadAction
 */
public class SingeFileUploadAction extends MVCPortlet {
  public void uploadFile(ActionRequest actionRequest,
          ActionResponse actionResponse) throws IOException, PortletException {
      System.out.println("In SingeFileUploadAction");
      UploadPortletRequest uploadRequest=PortalUtil.getUploadPortletRequest(actionRequest);
      File file =uploadRequest.getFile("file");
      String fileName = uploadRequest.getFileName("file");
      System.out.println("FileName:"+fileName);
      //Mike Test
      Map<String, String[]> reqMap = actionRequest.getParameterMap();
      System.out.println("Printing all actionRequest Params");
      for (Map.Entry<String, String[]> entry : reqMap.entrySet())
      {
          System.out.println(entry.getKey() + "/" + Arrays.toString(entry.getValue()));
      }

      System.out.println("----------\nPrinting all uploadRequest Params");
      Map<String, String[]> upReqMap =uploadRequest.getParameterMap();
      for (Map.Entry<String, String[]> entry : upReqMap.entrySet())
      {
          System.out.println(entry.getKey() + "/" + Arrays.toString(entry.getValue()));
      }

      System.out.println(file.getName());

  }
  public void uploadSubmit(ResourceRequest resourceRequest,
      ResourceResponse resourceResponse)  {
    System.out.println("In uploadSubmit");
    UploadPortletRequest uploadRequest=PortalUtil.getUploadPortletRequest(resourceRequest);
//    File file =uploadRequest.getFile("file");
//    System.out.println(file.getName());

  }
}

Загрузка файла Liferay

person Ashok Goli    schedule 10.03.2015
comment
Спасибо за фрагменты кода, Ашок. Я пытаюсь реализовать ваше решение, но столкнулся с проблемой. Всякий раз, когда я нажимаю кнопку «Продолжить»… ничего не происходит. Кажется, я не могу отправить форму через Ajax. Я хочу расширить функциональность, чтобы загружать несколько файлов в библиотеку документов, хотя сначала я сосредоточусь на загрузке отдельных файлов. - person evaldeslacasa; 22.07.2015
comment
Приведенный выше код не загружается в DAM. Он просто распечатывает метаданные файла. Проверьте журналы, если он печатает детали. Почему вы разрабатываете загрузку нескольких файлов, если она уже существует в портлете DAM? Попробуйте повторно использовать его и настроить с помощью хуков. Сэкономит вам много времени. - person Ashok Goli; 24.07.2015
comment
Спасибо, я видел, как были напечатаны детали файла. Мое требование состоит в том, чтобы создать портлет для загрузки нескольких файлов в папку DAM, не влияя на функциональность DAM в панели управления. Я еще не нашел хорошего способа настроить портлет DAM. Одна из причин, по которой мне не хотелось бы использовать механизм DAM Liferay, заключается в том, что он использует Flash. Но моя главная проблема заключается в том, что с моей точки зрения мне сложно настроить этот портлет с помощью хуков. Любая помощь там будет оценена. - person evaldeslacasa; 24.07.2015
comment
JSP портлета DAM, в котором Liferay реализует множественную загрузку файлов, сложен: github.com/liferay/liferay-portal/blob/6.2.x/portal-web/docroot/. Я думал, что настройка действия, используемого Liferay при загрузке нескольких файлов, является хорошим вариантом, но я не уверен, как это сделать и повлияет ли это на поведение DAM панели управления. - person evaldeslacasa; 24.07.2015
comment
Попробуйте использовать адаптеры приложений, чтобы настроить изменения хуков для вашего конкретного сайта. Также поместите некоторые условия if в JSP, чтобы ваши изменения были видны только на вашей странице/сайте/URL/пользователе/группе пользователей/роли. DAM использует флэш-память, но только в том случае, если какой-либо другой вариант перетаскивания недоступен. Или, по крайней мере, я так думаю, что это работает. В любом случае, было бы лучше настроить его, потому что у вас будет базовый код портала, проверенный и проверенный людьми из Liferay. - person Ashok Goli; 24.07.2015
comment
Спасибо за ценные предложения Ашок. Согласно документу Liferay компонента Upload: fallbackContainer {string|object}: селектор или DOM-элемент контейнера, [b]содержащий запасной вариант (на случай, если flash не поддерживается)[/b]... Похоже, что Flash будет использовать в первую очередь, но я не уверен. Я хотел бы тщательно изучить адаптеры приложений, но я близок к крайнему сроку. Я нашел альтернативное решение, над которым работаю: itsliferay.blogspot.com/2011/12/. Это выглядит как хорошая альтернатива. - person evaldeslacasa; 24.07.2015
comment
Привет, @AshokFelix Куда идет файл после загрузки? - person 光 Hikari No kun; 30.07.2015
comment
Он загружается во временную папку tomcat со случайным именем. В этом примере мы не сохраняем файл. Вы можете использовать объект File, чтобы сохранить его в любом месте. - person Ashok Goli; 30.07.2015
comment
К вашему сведению, вам не нужен взлом jquery. Проблема с компонентом загрузки, отображаемым вверху, связана не с ошибкой в ​​компоненте, а с ошибкой в ​​вашем коде. Вы должны установить boundingBox, а не контейнер. - person deadcyclo; 06.11.2015
comment
@deadcyclo Позвольте мне попробовать :) - person Ashok Goli; 09.11.2015

Попробовав настроить этот компонент под свои нужды, я бы порекомендовал другой способ реализации загрузки файлов в Liferay.

Отсутствие документации по компоненту Liferay.Upload, а также сложность базового кода портлета Liferay File Upload затрудняют настройку загрузки файлов, реализованную в Liferay.

Моя рекомендация такова: создайте новый пользовательский портлет и используйте библиотеку jQuery: плагин jQuery File UPload. Посетите его веб-сайт здесь. Это хорошо написанная библиотека с достойной документацией. может адаптировать его к вашим потребностям, поскольку он охватывает множество настроек, которые вы ожидаете от загрузчика файлов.

Краткое описание того, каким будет представление jsp в вашем портлете:

<%@ taglib uri="http://java.sun.com/portletpublic void uploadFiles(ActionRequest request, ActionResponse response) throws PortletException, IOException, SystemException, PortalException{

  UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(request);
  Enumeration<?> paramEnum = uploadRequest.getParameterNames();
  File tempFile;
  Map<String, File> fileMap = new LinkedHashMap<String, File>();

  while (paramEnum.hasMoreElements()){
    String parameter = (String) paramEnum.nextElement();
    if (parameter.startsWith("file")){
      tempFile = uploadRequest.getFile(parameter);

      //******************************************
      //do what you need with the file here
      //******************************************
    }
  }
}
0" prefix="portlet" %> <%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%> <portlet:defineObjects /> File Bulk Uploader <portlet:actionURL var="uploadFileURL" name="uploadFiles"/> <script> $(document).ready(function(){ $("#multipleupload").uploadFile({ url:"<%= uploadFileURL.toString() %>", multiple:true, dragDrop:true, sequential:true, sequentialCount:1 }); }); </script> <div id="multipleupload">Upload</div>

Как видите, использование этой библиотеки делает очень простую реализацию представления, предоставляя загрузчик файлов. После этого реализуйте действие класса портлета следующим образом:

public void uploadFiles(ActionRequest request, ActionResponse response) throws PortletException, IOException, SystemException, PortalException{

  UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(request);
  Enumeration<?> paramEnum = uploadRequest.getParameterNames();
  File tempFile;
  Map<String, File> fileMap = new LinkedHashMap<String, File>();

  while (paramEnum.hasMoreElements()){
    String parameter = (String) paramEnum.nextElement();
    if (parameter.startsWith("file")){
      tempFile = uploadRequest.getFile(parameter);

      //******************************************
      //do what you need with the file here
      //******************************************
    }
  }
}

При отладке paramEnum он получает параметр «файл» каждый раз, когда перетаскиваемый файл обрабатывается для загрузки. Это последовательный механизм, поэтому действие uploadFiles запускается для каждого файла:

отладка paramEnum

person evaldeslacasa    schedule 10.09.2015
comment
Привет, я попробовал ваш код, но в классе Java я никогда не получаю параметр типа файла. Любые входы? - person Tina Agrawal; 13.01.2016
comment
Здравствуйте Тина. Если бы вы могли отладить переменную paramEnum после перетаскивания файла, мы, возможно, могли бы увидеть, отличаются ли загруженные файлы от имени файла... или загружаются ли файлы вообще. Если файлы в параметрах uploadRequest не найдены, попробуйте добавить это в атрибуты загрузчика в JSP: allowTypes:xls,xlsx,csv (например) и проверьте, загружаются ли эти расширения файлов в качестве параметров filex. Мой код был реализован для jQuery File UPload 4.0.2; Я предполагаю, что мы оба используем одну и ту же версию. - person evaldeslacasa; 13.01.2016
comment
Я добавил скриншот с отладкой paramEnum, если это поможет. - person evaldeslacasa; 13.01.2016

Это моя реализация для многократной загрузки файлов с использованием стиля LifeRay (перетаскивание или выбор четырехугольника файла). Этот код загрузит файлы во временную папку Liferay (DLFolderConstants.DEFAULT_PARENT_FOLDER_ID), затем внутри метода METHODJAVANAMEManageForm в ClientPortlet.java вы сможете получить их и использовать по своему усмотрению. Это то же самое, что и при многократных загрузках файлов liferay.

view.jsp

<portlet:actionURL windowState="maximized" var="NAMEUrl" name="METHODJAVANAMEManageForm">
</portlet:actionURL>

<form action="<c:out value="${NAMEUrl}"/>" method="POST" enctype="multipart/form-data">
    <liferay-util:include page="/jsp/multipleAttach.jsp" servletContext="<%=this.getServletContext()%>"/>
    <!--other <input <div <span.....-->
</form>

multiAttach.jsp:

<%@page import="com.liferay.portal.kernel.util.ParamUtil"%>
<%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%>
<%@page import="com.liferay.portal.kernel.util.StringPool"%>
<%@page import="com.liferay.portal.kernel.util.PropsKeys"%>
<%@page import="com.liferay.portal.kernel.util.PrefsPropsUtil"%>
<%@page import="com.liferay.portal.kernel.util.StringUtil"%>
<%@page import="com.liferay.portal.service.TicketLocalServiceUtil"%>
<%@ page import="com.liferay.portlet.documentlibrary.model.DLFileEntryConstants" %>
<%@ page import="com.liferay.portal.kernel.util.Constants" %>
<%@page import="com.liferay.portal.service.ServiceContext"%>
<%@page import="com.liferay.portal.model.TicketConstants"%>
<%@page import="com.liferay.portal.model.User"%>
<%@page import="com.liferay.portal.model.Ticket"%>
<%@page import="com.liferay.portal.kernel.repository.model.Folder"%>
<%@page import="com.sun.mail.imap.DefaultFolder"%>
<%@page import="com.liferay.util.portlet.PortletProps"%>
<%@page import="com.liferay.portlet.documentlibrary.model.DLFolderConstants"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%>
<%@ taglib uri="http://liferay.com/tld/util" prefix="liferay-util"%>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet"%>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme"%>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui"%>
<portlet:defineObjects />
<liferay-theme:defineObjects/>

 <%
Ticket ticket = TicketLocalServiceUtil.addTicket(user.getCompanyId(), User.class.getName(), user.getUserId(), TicketConstants.TYPE_IMPERSONATE, null, null, new ServiceContext());
%>

<!--REEDME instead of<form> of view.jsp you can also use <aui:form action="<c:out value="${NAMEUrl}"/>" cssClass="lfr-export-dialog" method="post" name="fm1">-->

<div class="lfr-dynamic-uploader">
    <div class="lfr-upload-container" id="<portlet:namespace />fileUpload">
    &nbsp;
    </div>
</div>
<div id="<portlet:namespace/>fallback"></div>

<aui:script use="liferay-upload,aui-base">
    var liferayUpload = new Liferay.Upload(
        {
            boundingBox: '#<portlet:namespace />fileUpload',
            deleteFile: '<liferay-portlet:actionURL name="METHODJAVANAMEFordeleteFile" doAsUserId="<%= user.getUserId() %>"><portlet:param name="struts_action" value="/document_library/edit_file_entry" /><portlet:param name="<%= Constants.CMD %>" value="<%= Constants.DELETE_TEMP %>" /><portlet:param name="folderId" value="<%= String.valueOf(DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) %>" /></liferay-portlet:actionURL>&ticketKey=<%= ticket.getKey() %><liferay-ui:input-permissions-params modelName="<%= DLFileEntryConstants.getClassName() %>" />',
            fileDescription: '<%= StringUtil.merge(PrefsPropsUtil.getStringArray(PropsKeys.DL_FILE_EXTENSIONS, StringPool.COMMA)) %>',
            maxFileSize: '<%= PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE) %>',
            metadataContainer: '#<portlet:namespace />commonFileMetadataContainer',
            metadataExplanationContainer: '#<portlet:namespace />metadataExplanationContainer',
            namespace: '<portlet:namespace />',
            tempFileURL: {
                method: Liferay.Service.bind('/dlapp/get-temp-file-entry-names'),
                params: {
                    groupId: <%= scopeGroupId %>,
                    folderId: <%= DLFolderConstants.DEFAULT_PARENT_FOLDER_ID %>,
                    tempFolderName: 'com.example.portlet.ClientPortlet' <!-- this is equals of _TEMP_FOLDER_NAME_ATTACHMENT of ClientPortlet.java -->
                }
            },
            uploadFile: '<liferay-portlet:actionURL name="METHODJAVANAMEForuploadFile" doAsUserId="<%= user.getUserId() %>"><portlet:param name="struts_action" value="/document_library/edit_file_entry" /><portlet:param name="<%= Constants.CMD %>" value="<%= Constants.ADD_TEMP %>" /><portlet:param name="folderId" value="<%= String.valueOf(DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) %>" /></liferay-portlet:actionURL>&ticketKey=<%= ticket.getKey() %><liferay-ui:input-permissions-params modelName="<%= DLFileEntryConstants.getClassName() %>" />'
        }
    );
</aui:script>

ClientPortlet.java

private static final String _TEMP_FOLDER_NAME_ATTACHMENT = ClientPortlet.class.getName();

public void METHODJAVANAMEManageForm(ActionRequest actionRequest,ActionResponse actionResponse) throws IOException, PortletException 
{
    List<FileEntry> tempFileEntrys = new ArrayList<FileEntry>();
    try
    {
        ThemeDisplay themeDisplay  =(ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
        UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(actionRequest);
        //get selected checkbox of file to upload
        String [] selectedFile = uploadRequest.getParameterValues("selectUploadedFileCheckbox");
        if(selectedFile != null)
        {
            for(int i = 0; i < selectedFile.length; ++i)
            {
                FileEntry tmpfile = TempFileUtil.getTempFile(themeDisplay.getScopeGroupId(), themeDisplay.getUserId(), selectedFile[i], _TEMP_FOLDER_NAME_ATTACHMENT);
                if(tmpfile!=null && tmpfile.getTitle()!=null && (!tmpfile.getTitle().equals("")))
                {
                    tempFileEntrys.add(tmpfile);
                    System.out.println("file: " + tmpfile.getTitle());
                }
            }
        }

        /////upload tempFileEntrys where you needed
    }
    catch (Exception e) 
    {
        e.printStackTrace();
    }
    finally
    {
        //delete all tmp files uploaded in liferay tmp folder
        for (FileEntry tmp : tempFileEntrys) 
        {
            try 
            {
                TempFileUtil.deleteTempFile(tmp.getFileEntryId());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    actionResponse.setRenderParameter("mvcPath","/jsp/viewList.jsp");
}

public void METHODJAVANAMEForuploadFile(ActionRequest actionRequest,ActionResponse actionResponse) throws Exception 
{
    //upload file in liferay tmp folder
    UploadPortletRequest uploadPortletRequest = PortalUtil.getUploadPortletRequest(actionRequest);
    ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
    long folderId = ParamUtil.getLong(uploadPortletRequest, "folderId");
    String sourceFileName = uploadPortletRequest.getFileName("file");
    InputStream inputStream = null;
    try 
    {
        inputStream = uploadPortletRequest.getFileAsStream("file");
        String contentType = uploadPortletRequest.getContentType("file");
        DLAppServiceUtil.addTempFileEntry(themeDisplay.getScopeGroupId(), folderId, sourceFileName,_TEMP_FOLDER_NAME_ATTACHMENT, inputStream, contentType);
        JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
        jsonObject.put("name", sourceFileName);
        jsonObject.put("title", sourceFileName);
        writeJSON(actionRequest, actionResponse, jsonObject);
    }
    catch (Exception e)
    {
        UploadException uploadException =(UploadException)actionRequest.getAttribute(WebKeys.UPLOAD_EXCEPTION);
        if ((uploadException != null) &&uploadException.isExceededSizeLimit()) 
        {
            throw new FileSizeException(uploadException.getCause());
        }
        else 
        {
            throw e;
        }
    }
    finally 
    {
        StreamUtil.cleanUp(inputStream);
    }
}       

public void METHODJAVANAMEFordeleteFile(ActionRequest actionRequest,ActionResponse actionResponse) throws IOException, PortletException 
{
    //delete file from liferay tmp folder, before uploaded
    ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
    long folderId = ParamUtil.getLong(actionRequest, "folderId");
    String fileName = ParamUtil.getString(actionRequest, "fileName");
    JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
    try 
    {
        DLAppServiceUtil.deleteTempFileEntry(themeDisplay.getScopeGroupId(), folderId, fileName,_TEMP_FOLDER_NAME_ATTACHMENT);
        jsonObject.put("deleted", Boolean.TRUE);
    }
    catch (Exception e) 
    {
        String errorMessage = themeDisplay.translate("an-unexpected-error-occurred-while-deleting-the-file");
        jsonObject.put("deleted", Boolean.FALSE);
        jsonObject.put("errorMessage", errorMessage);
    }
    writeJSON(actionRequest, actionResponse, jsonObject);
}

Нажмите для просмотра результатов

person Diego87    schedule 06.05.2015
comment
Проверим это и сообщим вам. - person Ashok Goli; 14.07.2015