2012-06-08 3 views
3

Кто-нибудь пытался загрузить несколько файлов в Liferay 6.1. Я пытался сделать это так же, как и в версии 6.0, и его неудача плохо. Я вижу начальную ссылку в левом верхнем углу страницы, а не портлет. Когда я нажимаю это и выбираю некоторые файлы, элемент управления не попадает в портлет. Я проверил свой портлет.xml и подтвердил, что класс портлета является правильным. Вот фрагмент кода в JSPЗагрузка нескольких файлов в Liferay 6.1

<liferay-portlet:actionURL doAsUserId="<%= user.getUserId() %>" windowState="pop_up" name="uploadFile" var="uploadFileURL" > 
    <portlet:param name="jspPage" value="/html/fileuploadportlet/view.jsp" /> 
</liferay-portlet:actionURL> 


<div class="lfr-dynamic-uploader"> 
     <div class="lfr-upload-container" id="<portlet:namespace />fileUpload"></div> 
    </div> 
<div id="<portlet:namespace/>fallback"></div> 
<aui:script use="liferay-upload"> 
    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:'<%=renderResponse.getNamespace()%>', 
     uploadFile: '<%=uploadFileURL.toString()%>', 
     buttonHeight: 100, 
     buttonText: 'BEGIN', 
     buttonWidth: 100, 
     onFileComplete: function(){alert('fileComplete');}, 
     onUploadError: function(){alert('error');} 
    }); 
</aui:script> 

А вот метод processAction моего портлета

@Override 
    public void processAction(ActionRequest actionRequest, 
      ActionResponse actionResponse) throws IOException, PortletException { 
     System.out.println("Something"); 
     UploadPortletRequest uploadRequest=PortalUtil.getUploadPortletRequest(actionRequest); 
     File file =uploadRequest.getFile("file"); 
     System.out.println(file.getName()); 
     for(int i=0;i<50000;i++){ 
      System.out.println("Something"); 
     } 

    } 

Screenshot

+0

Можете ли вы показать нам, что происходит в консоли разработчика? – luther

+0

Это говорит tempFileURL неопределен [Перерыв на этой ошибке] \t ... empFileURL [ 'метод'] (tempFileURL [ 'PARAMS'], A.bind ('_ formatTempFiles', например) ... –

+0

Добавлен скриншот –

ответ

2

Вы можете проверить, если ваш <aui:script> правильно, ниже то, что показано в HTML/портлета /document_library/upload_multiple_file_entries.jsp, я думаю, что вам не хватает атрибута tempFileURL:

<aui:script use="liferay-upload"> 
     new Liferay.Upload(
      { 
       allowedFileTypes: '<%= allowedFileExtensions %>', 
       container: '#<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.DL.DLApp.getTempFileEntryNames, 
        params: { 
         groupId: <%= scopeGroupId %>, 
         folderId: <%= folderId %>, 
         tempFolderName: 'com.liferay.portlet.documentlibrary.action.EditFileEntryAction' 
        } 
       }, 
       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> 

Надеюсь, это поможет.

+0

Что такое tempFileURL и как я могу добавить это из портлета. По внешнему виду они пытаются вызвать метод службы с помощью службы javascript api, у меня нет такого требования. –

+2

tempFileURL используется для получения имен файлов, временно хранящихся в местоположении (определяемом tempFolderName) на сервере до времени вы фактически сохраняете его как DLFileEntry, то есть как даже когда вы явно не сохранили файл, Liferay показывает этот файл при следующем приходе на страницу загрузки. Он возвращает имена файлов (getTempFileEntryNames), хранящихся (не сохраненных), чтобы показать их в пользовательском интерфейсе, чтобы вы могли выбрать его через флажки помимо имени файла, а затем нажмите «Сохранить», чтобы сохранить выбранные файлы. –

+0

Для распознавания 'Liferay.Service.DL.DpA.ppt.getTempFileEntryNames', не забудьте включить service.js следующим образом: ' ' или объявить его в liferay-portlet.xml следующим образом: ' /html/js/liferay/service.js' – AdrianRM

Смежные вопросы