一、在portlet一般上传文件
public void uploadFile(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
UploadPortletRequest upload = com.liferay.portal.util.PortalUtil.getUploadPortletRequest(actionRequest);
String fileName = upload.getFileName("file");
String contentType = upload.getContentType("file");
long size = upload.getSize("file");
File tempFile = upload.getFile("file");
InputStream is = upload.getFileAsStream("file");
if (Validator.isNotNull(fileName)) {
Date today = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("MM-dd-yyyy");
String formattedDate = formatter.format(today);
String dirPath = actionRequest.getPortletSession().getPortletContext().getRealPath("/") + File.separator + "uploadfiles" + File.separator
+ formattedDate + File.separator;
File NewfileDir = new File(dirPath);
if (!NewfileDir.exists()) {
NewfileDir.mkdir();
}
FileUtil.copyFile(tempFile, new File(dirPath + fileName));
FileUtil.delete(tempFile);
SessionMessages.add(actionRequest, "success");
}
}
<%@ 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" %>
<%@ page import ="javax.portlet.PortletURL" %>
<portlet:actionURL name="uploadFile" var="uploadFileURL"/>
<liferay-ui:success key="success" message="upload-file-successfully"></liferay-ui:success>
<aui:form name="fm" action="<%=uploadFileURL.toString() %>" method="post" enctype="multipart/form-data">
<aui:fieldset>
<aui:input name="file" size="45" type="file"/>
<aui:button-row>
<aui:button type="submit"/>
</aui:button-row>
</aui:fieldset>
</aui:form>
二、将获取到的文件上传到Liferay的文档库
public void uploadFile(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
UploadPortletRequest upload = com.liferay.portal.util.PortalUtil.getUploadPortletRequest(actionRequest);
String fileName = upload.getFileName("file");
String contentType = upload.getContentType("file");
long size = upload.getSize("file");
File tempFile = upload.getFile("file");
InputStream is = upload.getFileAsStream("file");
if (Validator.isNotNull(fileName)) {
addLiferayStore(actionRequest, tempFile);
SessionMessages.add(actionRequest, "success");
}
}
public void addLiferayStore(ActionRequest actionRequest, File f) throws PortalException, SystemException, IOException {
String mimeType = MimeTypesUtil.getContentType(f);
long userId = PortalUtil.getUserId(actionRequest);
Long groupId = PortalUtil.getScopeGroupId(actionRequest);
DLAppLocalServiceUtil.addFileEntry(userId, groupId, DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_BASIC_DOCUMENT, f.getName(), mimeType,
f.getName(), f.getName(), "", FileUtil.getBytes(f), ServiceContextFactory.getInstance(DLFileEntry.class.getName(), actionRequest));
}
在portlet中获取到我们上传的文件,只算是完成了第一步。取到了上传的文件,怎么传到Liferay的文件库中呢?使用如下的接口
DLAppLocalServiceUtil.addFileEntry(long userId, long repositoryId, long folderId,java.lang.String sourceFileName, java.lang.String mimeType,java.lang.String title, java.lang.String description,java.lang.String changeLog, byte[] bytes,com.liferay.portal.service.ServiceContext serviceContext)
此接口的参数逐个说明:
long userId:上传此文件的用户id
long repositoryId:仓库存储ID,此ID一般为groupid
long folderId:文件夹ID,可以自己创建,或使用liferay默认的如:DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_BASIC_DOCUMENT等,最好是自己根据上传资源的情况分类,如新闻的存到新闻文件,博客的存成博客文件等
String sourceFileName:上传文件的源文件名
String mimeType:算是文件类型,可以使用mimeType = MimeTypesUtil.getContentType(fileName);根据文件名获取。
String title:文件标题,这个与SourceFileName的区别在于,此title是最终显示在系统上的,可以由用户输入,源文件名称是上传获取的文件名称,不能手动改变。可以留空。
String description:关于此文件的描述,可以留空。
String changeLog:文件修改日志,可以留空。
byte[] bytes:文件的正文件,字节数组。
ServiceContext serviceContext:此类可以通过以下代码
ServiceContext serviceContext = ServiceContextFactory.getInstance(DLFileEntry.class.getName(), request);
获取。此对象里面包含了一些环境信息,如groupid,companyid,权限,门户路径,当前语言,userId等信息。
在实际应用中可以自己将上面的这个接口再做一层封装,作为一个公共的文件上传接口,以供其他需要文件上传的地方调用,具体的请自行封装,这里就不再帖我封装的代码。
2、获取文件路径
上面的文件上传之后返回的是一个FileEntry的对象,如果获取到上传的文件的路径呢,方法如下,可以定义一个方法,用来返回文件路径,此方法对图片、各式文件都是有效。
public static String getFilePath(FileEntry fileEntry) {
if (null!=fileEntry) {
return "/documents/" + fileEntry.getRepositoryId() + "/" + fileEntry.getFolderId() + "/"
+ HttpUtil.encodeURL(HtmlUtil.unescape(fileEntry.getTitle()), true) + "/" + fileEntry.getUuid();
}else {
//如有需要,此处可以定义一个默认图片
return StringPool.BLANK;
}
或者下面的这个方法,下面的这个更简便一些
public static String getFilePath(FileEntry fileEntry) {
if (null!=fileEntry) {
return "/documents/" + fileEntry.getRepositoryId() + "/" + fileEntry.getUuid();
}else {
//如有需要,此处可以定义一个默认图片
return StringPool.BLANK;
}
有时候如果文件是一个图片,上传的图片可以很大,如何获取一个缩略图呢?如下:
public static String getSmallImagePath(FileEntry fileEntry){
String path = getFilePath(fileEntry);
return path+"?imageThumbnail=1";
}
目前有还有一个问题,就是传到媒体库中的文件,被重命名了,解决不了,谁有办法给我留言?谢谢
分享到:
相关推荐
Liferay多文件上传与下载实例,前端包含多文件上传JS,可以动态追加文件,删除文件,还有文件类型与大小验证JS。后端可以批文件上传。 下载可以实现弹出页另存为。避免了Liferay自身下载PDF和图片时在当前页面打开的...
这种方法的好处是可以自定义上传文件的目录和文件名,同时避免了Document Library API的复杂性。然而,它可能不支持所有高级特性,如版本控制和权限管理。 **下载功能** 下载功能相对简单,通常可以通过提供一个...
本主题关注的是如何在Liferay7中集成Activiti BPM,并通过上传文件来部署流程模板。 首先,我们要理解Liferay7和Activiti的集成基础。Liferay7提供了丰富的API和插件机制,使得与第三方服务如Activiti的集成变得...
- edit_file_entry.jsp页面负责展示文件夹列表,并提供交互元素,如按钮和链接,供用户选择文件夹和上传文件。 4. **前端交互**: - 当用户选择文件夹时,前端代码(如AUI组件)处理用户交互,如点击“select”...
Liferay是一款开源的企业级门户平台,它提供了丰富的功能和高度可定制性,广泛应用于构建企业网站、社交网络和协作工具。这个"liferay开发文档集合"包含了一系列的PDF指南,帮助开发者深入理解和有效地利用Liferay的...
【Liferay数据库表结构说明文档】 Liferay是一个开源的企业级门户平台,它的核心功能之一是管理用户、组织、权限和内容。为了实现这些功能,Liferay维护着一系列的数据库表来存储和管理这些数据。本文档主要关注的...
Liferay提供了两种项目部署方式:热部署模式和上传war包。热部署模式可以直接将项目部署到服务器上,而上传war包方式需要登录后台,上传war包,以便发布项目。 四、项目部署步骤 1. 在服务器上直接部署项目,将...
完成portlet的编码后,通过编译和部署步骤,将portlet打包成JAR或WAR文件,然后将其上传到Liferay的部署目录。一旦部署成功,可以在Liferay门户中查看并测试portlet的功能。 举例来说,"表格维护portlet开发"章节将...
同时,服务器端脚本需要能够处理FCKeditor的POST请求,解析上传文件的数据,并执行自定义的文件处理逻辑。 3. **安全考虑**:在实现自定义文件名和路径时,要特别注意安全性。避免使用可能引发安全问题的文件名,如...
`dl.file.max.size`属性用于设定单个文件的最大上传大小,例如`dl.file.max.size=30720000`表示最大上传文件大小为30MB。`dl.file.extensions`则定义了允许上传的文件类型,如`.bmp`、`.doc`、`.pdf`等。这可以防止...
用户可以方便地上传文档,如在文件夹内点击【Add Document】,选择本地文件上传。值得注意的是,上传的文档大小通常有3000KB的限制。文档不会存储在数据库中,也没有直接的访问路径,这可能是出于安全和效率的考虑。...
- **手动部署**: 直接上传文件到服务器。 - **Ant 自动部署**: 使用Ant脚本自动化部署过程。 通过以上内容,我们可以看到Liferay Portal不仅提供了一套完整的门户解决方案,还允许开发者根据实际需求进行定制化开发...
- `file.server.base.url`: 文件服务器的基础URL,用于访问上传的文件。 以上只是 Liferay 6.0.5 `portal.properties` 文件中部分关键配置的简要介绍。实际文件中包含更多细节,如垃圾回收设置、数据库连接池参数...
Liferay的内容管理系统支持文档的上传、版本控制、权限管理,用户可以创建、组织和分享各种类型的内容。文档库功能则允许用户存储和共享文件,支持版本追踪和权限控制。 9. **集成与API** Liferay提供了丰富的API...
7. **发布与升级**:一旦应用测试通过,可以将WAR文件上传到Liferay的控制台进行发布,或者将更新的WAR文件放入Liferay的部署目录,系统会自动检测并更新portlet。 在提供的文件列表中,`build.properties`是Ant...
- **内容管理**:Liferay内置了文档库,支持文件上传、版本控制和权限管理,方便用户分享和协作。 - **社区建设**:用户可以创建自定义社区,包含论坛、博客、日历等多种交互组件。 - **身份和访问管理**:通过...
通过分析和实现这个"图片批量上传demo",开发者能够深入理解Liferay中文件处理和portlet开发的细节,同时也能提升在实际项目中的应用能力。此示例不仅适用于学习,也可以直接作为项目中图片上传功能的基础。在实践中...
- `commons-fileupload-1.2.1.jar`:支持文件上传功能。 - `freemarker-2.3.15.jar`:提供模板引擎支持。 - `ognl-2.7.3.jar`:实现对象图导航语言(OGNL),Struts2表达式语言的核心。 - `struts2-core-2.1.8.1....
5. **部署portlet**:将WAR文件上传到Liferay Portal服务器的deploy目录下,服务器会自动检测并部署portlet。 6. **测试和调试**:在Liferay Portal上查看和测试portlet的功能,根据需要进行调整。 **Portlet API...
- **上传至 Liferay**:登录管理员界面,选择“控制面板”>“系统设置”>“设计”,然后上传主题包。 #### 三、Liferay 网站 CMS 内容管理 **3.1 CMS 相关概念诠释** - **内容管理系统 (CMS)**:Liferay 的 CMS ...