Liferay7 BPM门户开发之28: Portlet文件上传,及实体类同步更新上传
Posted 昕友软件开发
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Liferay7 BPM门户开发之28: Portlet文件上传,及实体类同步更新上传相关的知识,希望对你有一定的参考价值。
抓住核心 -- 王昕
Liferay文件上传的核心就是使用UploadPortletRequest类
继承关系
java.lang.Object
extended byjavax.servlet.ServletRequestWrapper
extended byjavax.servlet.http.HttpServletRequestWrapper
extended bycom.liferay.util.servlet.UploadPortletRequest
实现关系:
Implemented Interfaces:
- javax.servlet.http.HttpServletRequest
- javax.servlet.ServletRequest
单一文件上传
jsp代码
<%@ 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/ui" prefix="liferay-ui"%> <portlet:defineObjects /> <portlet:actionURL name="upload" var="uploadFileURL"></portlet:actionURL> <aui:form action="<%= uploadFileURL %>" enctype="multipart/form-data" method="post"> <aui:input type="file" name="fileupload" /> <aui:button name="Save" value="Save" type="submit" /> </aui:form>
java:
import java.io.File; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import org.apache.commons.io.FileUtils; import com.liferay.portal.kernel.upload.UploadPortletRequest; import com.liferay.portal.util.PortalUtil; import com.liferay.util.bridges.mvc.MVCPortlet; public class RelatedFilesPortlet extends MVCPortlet { private final static int ONE_GB = 1073741824; private final static String baseDir = "/tmp/uploaded/"; private final static String fileInputName = "fileupload"; public void upload(ActionRequest request, ActionResponse response) throws Exception { UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(request); long sizeInBytes = uploadRequest.getSize(fileInputName); if (uploadRequest.getSize(fileInputName) == 0) { throw new Exception("文件为空!"); } // 从uploadRequest获得File对象 File uploadedFile = uploadRequest.getFile(fileInputName); String sourceFileName = uploadRequest.getFileName(fileInputName); // 存储文件的目录 File folder = new File(baseDir); // 对当前目录做可用空间检查 if (folder.getUsableSpace() < ONE_GB) { throw new Exception("空间不足1GB!"); } // 最终的文件路径 File filePath = new File(folder.getAbsolutePath() + File.separator + sourceFileName); // 保存文件到物理路径 FileUtils.copyFile(uploadedFile, filePath); //以下是保存在文档库 ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); ServiceContext serviceContext = ServiceContextFactory.getInstance(actionRequest); String contentType = MimeTypesUtil.getContentType(uploadedFile); InputStream inputStream = new FileInputStream(uploadedFile); //要保存的文档库路径 Folder folderName = DLAppLocalServiceUtil.getFolder(parentRepositoryId, parentFolderId, "Folder Name"); long folderId = folderName.getFolderId(); long repositoryId = folderName.getRepositoryId(); //保存到文档库 FileEntry fileEntry = DLAppLocalServiceUtil.addFileEntry(themeDisplay.getUserId(), repositoryId, folderId, uploadedFile.getName(), contentType, "File Name", "description", "changeLog", inputStream, uploadedFile.length(), serviceContext); } }
关于文档库参数说明的解释:
http://blog.csdn.net/lan861698789/article/details/8122203
和实体类一起保存文件的Demo
public void addYourEntity(ActionRequest request, ActionResponse response) throws Exception { UploadPortletRequest uploadPortletRequest = PortalUtil.getUploadPortletRequest(request); long artistId = ParamUtil.getLong(uploadPortletRequest, "artistId"); String name = ParamUtil.getString(uploadPortletRequest, "name"); int year = ParamUtil.getInteger(uploadPortletRequest, "year"); //更多的实体类信息 ...... InputStream inputStream = uploadPortletRequest.getFileAsStream("file"); ServiceContext serviceContext = ServiceContextFactory.getInstance( YourEntity.class.getName(), uploadPortletRequest); try { YourEntityServiceUtil.addYourEntity( artistId, name, year, inputStream, serviceContext); SessionMessages.add(request, "YourEntityAdded"); String redirect = ParamUtil.getString( uploadPortletRequest, "redirect"); response.sendRedirect(redirect); } catch (Exception e) { SessionErrors.add(request, e.getClass().getName()); if (e instanceof YourEntityNameException || e instanceof PrincipalException) { response.setRenderParameter( "jspPage", "/html/YourEntitys/edit_YourEntity.jsp"); } else { response.setRenderParameter("jspPage", "/html/error.jsp"); } } }
以上是关于Liferay7 BPM门户开发之28: Portlet文件上传,及实体类同步更新上传的主要内容,如果未能解决你的问题,请参考以下文章
Liferay7 BPM门户开发之17: Portlet 生命周期
Liferay7 BPM门户开发之3: Activiti开发环境搭建
Liferay7 BPM门户开发之14: Liferay开发体系简介
Liferay7 BPM门户开发之34: liferay7对外服务类生成(RestService Get Url)