Это моя реализация для нескольких загружаемых файлов с использованием 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">
</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
Спасибо за фрагменты кода Ашока. Я пытаюсь реализовать ваше решение, но у меня проблема. Всякий раз, когда я нажимаю кнопку «Продолжить» ... ничего не происходит. Похоже, я не могу отправить форму через Ajax. Я хочу расширить функциональность для загрузки нескольких файлов в библиотеку документов, хотя я сосредоточен на загрузке отдельных файлов. – evaldeslacasa
Приведенный выше код не загружается в DAM. Он просто распечатывает метаданные файла. Проверьте журналы, если они печатают детали. Почему вы разрабатываете многофайловую загрузку, когда она уже существует в портлете DAM? Попробуйте его повторно и настройте с помощью крючков. Спасает вас долго. –
Спасибо, я видел, как были напечатаны данные файла. Мое требование - создать портлет для загрузки нескольких файлов в папку DAM, не затрагивая функциональность DAM на панели управления. Я еще не нашел хорошего способа настроить портлет DAM. Одна из причин, по которой мне не хотелось бы использовать механизм DAM Liferay, будет потому, что он использует Flash. Но моя главная проблема заключается в сложности с моей точки зрения, чтобы настроить этот портлет с помощью крючков. Любая помощь там была бы оценена. – evaldeslacasa