抓住核心 。

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文件上传,及实体类同步更新上传的更多相关文章

  1. Liferay7 BPM门户开发之17: Portlet 生命周期

    Portlet 生命周期 init() =〉 render() =〉 processAction() =〉 processEvent() =〉 serveResource() =〉destroy() ...

  2. 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 ...

  3. Liferay7 BPM门户开发之46: 集成Activiti用户、用户组、成员关系同步

    在实际的BPM集成开发过程中,Liferay和Activiti这两个异构的系统之间,用户.组的同步需求非常重要,用来实现签收组的概念,比如指定签收组.会签.抢签都需要用到. Activiti可以通过自 ...

  4. Liferay7 BPM门户开发之10: 通用流程实现从Servlet到Portlet(Part1)

    开发目的: 实现通用流程自动化处理(即实现不需要hardcode代码的bpm统一处理后台,仅需要写少量前端html form代码和拖拽设计BPM定义) 既可独立运行或可依托于Liferay或依托其它门 ...

  5. Liferay7 BPM门户开发之37: Liferay7下的OSGi Hook集成开发

    hook开发是Liferay客制扩展的一种方式,比插件灵活,即可以扩展liferay门户,也能对原有特性进行更改,Liferay有许多内置的服务,比如用hook甚至可以覆盖Liferay服务. 可作为 ...

  6. Liferay7 BPM门户开发之20: 理解Asset Framework

    Asset框架用于将您开发的门户内容添加Liferay的核心系统功能.打个比方,你开发了一个事件TodoList管理的插件,在列表显示的时候,你可以集成Asset框架,让你的自定义内容支持Tag标签. ...

  7. Liferay7 BPM门户开发之9: 流程表单数据动态映射体系

    设计目的: 每个流程表单涉及不同的表单变量.比如请假流程有3个任务节点,分别是 Task1:开始流程,填写请假人.请假原因.请假开始时间.请假结束时间: Task2:上级审批,填写是否同意,审批意见: ...

  8. Liferay7 BPM门户开发之42: Liferay核心JSP定制扩展

    Liferay最大的好处是不仅接口强大,利于扩展,就连JSP定制扩展都提供了3种方式. 修改核心jsp代码,有3种修改方式:1.暴力修改直接修改(位于portal-web/docroot/html), ...

  9. Liferay7 BPM门户开发之26: 集成Activiti到Liferay7

    开发顺序: 实战任务1,开发BPM管理后台(用于在Liferay管理中心管理Activiti模型上传) 一个熟悉Portlet操作的项目,为开发打好基础. http://www.cnblogs.com ...

随机推荐

  1. ByteArrayInputStream和ByteArrayOutputStream

    public class ByteArrayTest { public static void main(String[] args) throws IOException { read(write( ...

  2. LVS三种工作方式八种算法

    一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算 ...

  3. Sublime 保存时自动转换tab成空格

    笔者最近学习c, c语言的清新代码风格让人眼前一亮,不禁爱上这种写作风格,变量名.等号.常量值之间空格分隔,清爽便于阅读. 于是笔者以此为代码写作规范,查阅自己以前写的java代码,以下用notepa ...

  4. Java 技术体系图

    Java 程序员 高级特性 反射.泛型.注释符.自动装箱和拆箱.枚举类.可变 参数.可变返回类型.增强循环.静态导入 核心编程 IO.多线程.实体类. 集合类.正则表达式. XML 和属性文件 图形编 ...

  5. wkwebview 和 JS 自用

    -(void)webView:(WKWebView *)webView didCommitNavigation:(null_unspecified WKNavigation *)navigation{ ...

  6. NC WebService接口开发流程

    一.定义类: 接口类 包定义在public下,接口类名为I开头,Service结尾 实现类 包定义在private下,实现类名以ServiceImpl结尾 VO类 若有VO类,也放在public下 U ...

  7. 基于PHP使用rabbitmq实现消息队列

    1.从github上面获取AMQP基于php的实现扩展 2.创建生产者 send.php   3.创建消费者 receive.php 4.在cli模式下 分别执行 send.php  receive. ...

  8. 安装数据库出现错误vc_red.msi找不到

    用虚拟光驱安装数据的时候可能会出现,找不到vc_red.msi的问题,通过加载的虚拟光驱目录设置,可能 仍然后问题,比如程序停止运行. 解决方法是:解压iso文件,用解压后的文件安装.然后在解压文件夹 ...

  9. Spring+Struts2/Hibernate 学习笔记

    ============Spring与Struts2整合============ (1)拷JAR包(Spring.Struts2) (2)配置org.springframework.web.conte ...

  10. jquery 获取radio选中的值

    如下案例:常用方法 1.获取选中值,三种方法都可以: $('input:radio:checked').val(): $("input[type='radio']:checked" ...