2015-01-23 2 views
4

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

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 Загрузить:

<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> 

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

ответ

1

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

4

Я дал ему шанс, основанный на ссылках Пауэла, и преуспел в чем-то вроде POC.

View.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_2_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 File Upload

+0

Спасибо за фрагменты кода Ашока. Я пытаюсь реализовать ваше решение, но у меня проблема. Всякий раз, когда я нажимаю кнопку «Продолжить» ... ничего не происходит. Похоже, я не могу отправить форму через Ajax. Я хочу расширить функциональность для загрузки нескольких файлов в библиотеку документов, хотя я сосредоточен на загрузке отдельных файлов. – evaldeslacasa

+0

Приведенный выше код не загружается в DAM. Он просто распечатывает метаданные файла. Проверьте журналы, если они печатают детали. Почему вы разрабатываете многофайловую загрузку, когда она уже существует в портлете DAM? Попробуйте его повторно и настройте с помощью крючков. Спасает вас долго. –

+0

Спасибо, я видел, как были напечатаны данные файла. Мое требование - создать портлет для загрузки нескольких файлов в папку DAM, не затрагивая функциональность DAM на панели управления. Я еще не нашел хорошего способа настроить портлет DAM. Одна из причин, по которой мне не хотелось бы использовать механизм DAM Liferay, будет потому, что он использует Flash. Но моя главная проблема заключается в сложности с моей точки зрения, чтобы настроить этот портлет с помощью крючков. Любая помощь там была бы оценена. – evaldeslacasa

0

Это моя реализация для нескольких загружаемых файлов с использованием 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> 

multipleAttach.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); 
} 

Click for Result view

+0

Вы проверите это и сообщите об этом. –

+0

@ AshokFelix хорошо? – Nenotlep

2

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

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

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

Резюме как вид JSP в вашем портлете будет:

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

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, он получает «файл» Parameter каждый раз, перетаскивать файл обрабатывается для загрузки. Это последовательный механизм и так, действие uploadFiles запускается для каждого файла:

paramEnum debugging

+0

Привет, я пробовал свой код, но в Java-классе я никогда не получаю параметр типа файла. Любые входы? –

+0

Привет Тина. Если вы можете отлаживать переменную paramEnum после перетаскивания файла, мы могли бы увидеть, загружены ли файлы, отличные от «файла» ... или если файлы загружены вообще. Если файлы не найдены в параметрах uploadRequest, попробуйте добавить это в атрибуты uploader в JSP: allowedTypes: «xls, xlsx, csv» (например) и проверить, будут ли эти расширения файлов загружаться как параметры «filex». Мой код был реализован для jQuery File UPload 4.0.2; Я предполагаю, что мы оба используем ту же версию. – evaldeslacasa

+0

Я добавил скриншот с отладкой paramEnum, если это поможет. – evaldeslacasa