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 = ; 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) == ) {
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 生命周期
Portlet 生命周期 init() =〉 render() =〉 processAction() =〉 processEvent() =〉 serveResource() =〉destroy() ...
- Liferay7 BPM门户开发之33: Portlet之间通信的3种方式(session、IPC Render Parameter、IPC Event、Cookies)
文章介绍了5种方式,4种是比较常用的: Portlet session IPC Public Render Parameters IPC Event Cookies 参考地址: https://web ...
- Liferay7 BPM门户开发之46: 集成Activiti用户、用户组、成员关系同步
在实际的BPM集成开发过程中,Liferay和Activiti这两个异构的系统之间,用户.组的同步需求非常重要,用来实现签收组的概念,比如指定签收组.会签.抢签都需要用到. Activiti可以通过自 ...
- Liferay7 BPM门户开发之10: 通用流程实现从Servlet到Portlet(Part1)
开发目的: 实现通用流程自动化处理(即实现不需要hardcode代码的bpm统一处理后台,仅需要写少量前端html form代码和拖拽设计BPM定义) 既可独立运行或可依托于Liferay或依托其它门 ...
- Liferay7 BPM门户开发之37: Liferay7下的OSGi Hook集成开发
hook开发是Liferay客制扩展的一种方式,比插件灵活,即可以扩展liferay门户,也能对原有特性进行更改,Liferay有许多内置的服务,比如用hook甚至可以覆盖Liferay服务. 可作为 ...
- Liferay7 BPM门户开发之20: 理解Asset Framework
Asset框架用于将您开发的门户内容添加Liferay的核心系统功能.打个比方,你开发了一个事件TodoList管理的插件,在列表显示的时候,你可以集成Asset框架,让你的自定义内容支持Tag标签. ...
- Liferay7 BPM门户开发之9: 流程表单数据动态映射体系
设计目的: 每个流程表单涉及不同的表单变量.比如请假流程有3个任务节点,分别是 Task1:开始流程,填写请假人.请假原因.请假开始时间.请假结束时间: Task2:上级审批,填写是否同意,审批意见: ...
- Liferay7 BPM门户开发之42: Liferay核心JSP定制扩展
Liferay最大的好处是不仅接口强大,利于扩展,就连JSP定制扩展都提供了3种方式. 修改核心jsp代码,有3种修改方式:1.暴力修改直接修改(位于portal-web/docroot/html), ...
- Liferay7 BPM门户开发之26: 集成Activiti到Liferay7
开发顺序: 实战任务1,开发BPM管理后台(用于在Liferay管理中心管理Activiti模型上传) 一个熟悉Portlet操作的项目,为开发打好基础. http://www.cnblogs.com ...
随机推荐
- cell线条前后缩短
[cell setSeparatorInset:UIEdgeInsetsMake(0, 20, 0, 20)];
- Web 登陆界面---简单模块1
今天学习登陆界面的基本模块,其中几个基本的元素 a元素.form元素.布局元素(table\tr\td).加粗(b).input元素 1.<a href="">内容&l ...
- Photoshop 使用曲线
曲线表示的是图像的明度, 通过信息办的 HSB 信息可以看到调整曲线时整个图像明度的变化 曲线的左下角表示图片的暗部, 右下角表示图片的高光部 而曲线本身的纵坐标则表示这个部分的明度, 例如将曲线的左 ...
- zabbix使用host metadata方式主动注册
host metadata是zabbix2.2新增加的功能,该功能在zabbix-agent端可以自定义条件,在选择自动注册的时候,zabbix-server端可以根据host metadata来选择 ...
- hdu 3254 (状压DP) Corn Fields
poj 3254 n乘m的矩阵,1表示这块区域可以放牛,0,表示不能,而且不能在相邻的(包括上下相邻)两个区域放牛,问有多少种放牛的方法,全部不放也是一种方法. 对于每块可以放牛的区域,有放或者不放两 ...
- 第一章 第一个spring boot程序(转载)
第一章 第一个spring boot程序 本编博客转发自:http://www.cnblogs.com/java-zhao/p/5324185.html 环境: jdk:1.8.0_73 mave ...
- 纵表、横表互转的SQL
纵表.横表互转的SQL By:大志若愚 1.建表: 纵表结构 Table_A create table Table_A ( 姓名 ), 课程 ), 成绩 int ) ) ) ) ) ) 姓名 课程 ...
- Unity3D 中 用quaternion 来对一个坐标点进行旋转的初步体会
在unity3d中,用四元数来表示旋转,四元数英文名叫quaternion . 比如 transform.rotation 就是一个四元数,其由四个部分组成 Quaternion = (xi + yj ...
- FME之于规划CAD数据质量检测
最近琢磨规划CAD数据转换入库GIS方面的技术问题,看过一些前辈的文章/文献,对于使用FME WorkBench方面,有了一些了解,往往直接转换数据丢失比较严重,而且GIS对图形属性和空间拓扑比较严格 ...
- 基于ticket的rw锁
代码: wiredtiger-2.8.0/src/os_posix/os_mtx_rw.c rw锁结构 struct { uint16_t writers; // Now serving for wr ...