2012-06-08 41 views
3

有沒有人嘗試過在Liferay 6.1中上傳多個文件。我試圖以與6.0版相同的方式來執行它,並且它的失敗很嚴重。我看到頁面左上角的開始鏈接,而不是portlet。當我點擊並選擇一些文件時,控件不會轉到我的portlet。我檢查了我的portlet.xml並驗證了portlet類是否正確。下面是在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> 

片斷,這裏是我的Portlet的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/portlet中所示/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的用法是什麼,以及如何從portlet添加它。從外觀上看,他們試圖調用使用javascript服務API的服務方法,我沒有這樣的要求 –

+2

tempFileURL用於獲取臨時存儲在服務器上的一個位置(由tempFolderName定義)上的文件的名稱,直到時間您實際上將其另存爲DLFileEntry,即即使沒有明確保存文件,Liferay也會在您下次上傳頁面時顯示這些文件。它返回存儲(不保存)的文件名(getTempFileEntryNames)以在UI上顯示它,以便除文件名外的複選框可以選擇它,然後單擊保存以保存選定的特定文件。 –

+0

對於'Liferay.Service.DL.DLApp.getTempFileEntryNames'被識別,不要忘記像這樣包含service.js: ''或者像這樣在liferay-portlet.xml中聲明它:' /html/js/liferay/service.js AdrianRM