前段时间在LIFERAY的开发过程中需要对图片进行处理,于是按照传统的方式自己写,结果郁闷了两天,怎么都不行。
原因是似乎在LIFERAY中无论如何调用response.setPortletContentType("image/jpeg");最后都是以“text/html”的形式输出,导致二进制图片显示不正常。我是将图片保存在数据库的BLOB字段中。
后来调试研究他的SOURCE,发现LIFERAY中ContentType参数如果不是以"text/html"开头的都会返回false,最终抛出一个不合法的参数异常。郁闷郁闷。。。。
本想绕过LIFERAY,结果却发费了更多时间,没办法只好回头来研究LIFERAY中自己使用图片上传功能。
Liferay的图片都保存在数据库中。主要的表是IMAGE表,查看他的数据信息,发现他保存图片的字段类型为CLOB,而不是BLOB。现在的问题来了,ORACLE中用CLOB保存图片和BLOB保存图片有什么不同?正在查证学习中。。若有朋友路过看到这篇帖子,请千万要不吝赐教哦。
下面来分析LIFERAY处理图片上传的JAVA代码
java 代码
-
- UploadPortletRequest uploadReq = PortalUtil
- .getUploadPortletRequest(req);
一、我们可以通过以上方法获得一个
uploadReq来处理上传的图片。
二、uploadReq的使用
java 代码
-
- File PRODUCT_IMG = uploadReq
- .getFile(ProductDisplayTerms.PRODUCT_IMGID); //上传表单的name
- byte[] bytes = FileUtil.getBytes(PRODUCT_IMG);
-
- Long imageId = new Long(rs.getLong(ProductDisplayTerms.PRODUCT_IMGID));
- if ((bytes != null) && (bytes.length > 0)) {
- imageId = ProductUtil.createImageId();
- ImageLocalServiceUtil.updateImage(imageId.longValue(), bytes,
- "jpeg", 63, 63, 1);
- }
Liferay中新增和更新图片都是使用updateImage方法,是
ImageLocalServiceUtil类的静态方法,该 类中还包含有其他包含对图片的操作,如:删除图片等等。查看SOURCE可以很直观的了解ImageLocalServiceUtil的相关信息。
在Liferay4.3.2中,updateImage的参数分别是:,updateImage(long 图片id,bytes[] 字节数组,"图片格式","高度","宽度","大小")。为了方便,以下是Liferay处理图片类的源码
java 代码
- public class ImageLocalServiceImpl extends ImageLocalServiceBaseImpl {
-
-
- public void deleteImage(long imageId) throws SystemException {
- try {
- if (imageId > 0) {
- ImageUtil.remove(imageId);
- }
- }
- catch (NoSuchImageException nsie) {
- }
- }
-
-
- public Image getImage(long imageId)
- throws PortalException, SystemException {
-
- return ImageUtil.findByPrimaryKey(imageId);
- }
-
-
- public List getImages() throws SystemException {
- return ImageUtil.findAll();
- }
-
-
- public List getImages(int begin, int end) throws SystemException {
- return ImageUtil.findAll(begin, end);
- }
-
-
- public List getImagesBySize(int size) throws SystemException {
- return ImageUtil.findBySize(size);
- }
-
-
- public Image updateImage(
- long imageId, byte[] bytes, String type, int height, int width,
- int size)
- throws SystemException {
-
-
- Image image = ImageUtil.fetchByPrimaryKey(imageId);
-
-
- if (image == null) {
- image = ImageUtil.create(imageId);
- }
-
- image.setModifiedDate(new Date());
- image.setTextObj(bytes);
- image.setType(type);
- image.setHeight(height);
- image.setWidth(width);
- image.setSize(size);
-
- ImageUtil.update(image);
-
- return image;
- }
-
- }
另:注解是自己写的,不是SOURCE中原有的
分享到:
相关推荐
同时,Liferay Form Builder可以创建自定义表单,用于收集和处理用户输入的数据。 6. **安全性与权限管理**:Liferay的安全模型基于Spring Security,提供角色、组、组织结构的精细权限控制。开发者需要理解如何...
Liferay Portal Liferay IDE
Portlets是Liferay中的核心组件,可以视为网页上的小型应用。通过学习这份文档,开发者能够理解portlet生命周期、渲染机制以及如何利用MVC Portlet模式进行开发。此外,文档还涵盖了portlet与Liferay服务的集成,如...
此外,"plugins开发指南11-plugin中开发hibernate应用.pdf"涵盖了在Liferay中使用Hibernate进行数据持久化的实践方法,这对于处理复杂业务逻辑至关重要。 "plugins开发指南13-liferay中使用ldap分析.pdf"讨论了...
在Liferay中,Hibernate常用于处理数据持久化。通过配置,开发者可以在Liferay中集成Hibernate,使得模型对象可以直接映射到数据库表,无需编写大量的SQL代码。Liferay的Service Builder工具也可以与Hibernate结合,...
对于想要深入了解Liferay的人来说,这个压缩包将是一个宝贵的资源库,提供了丰富的学习材料和实践经验。无论是新手还是老手,都可以从中找到提升自己技能的路径。通过阅读文档、研究源码、参与讨论和实践工具,用户...
将Liferay与Struts整合,可以充分利用Struts的业务逻辑处理能力和Liferay的门户管理特性,打造出高效、灵活的应用系统。 在这个"liferay 整合struts例子"中,我们可以学习到以下几个关键知识点: 1. **Liferay ...
本指南旨在帮助开发者了解Liferay 6.0的核心特性和开发流程,通过详细的讲解和示例代码,让读者能够快速上手并进行高效开发。 #### 二、Liferay 6.0 主要特性 ##### 1. 开发应用 Liferay 6.0 支持多种类型的应用...
在现代Web开发领域中,网站不仅需要具备强大的功能,还需要拥有吸引人的视觉设计与良好的用户体验。Liferay作为一款开源的企业级门户平台,提供了丰富的工具与框架帮助开发者们实现这一目标。本文档旨在介绍Liferay ...
在这个“liferay详细讲解 liferay项目完全讲解”的资料包中,我们可以期待深入了解到关于Liferay的核心概念、开发实践以及与其相关的技术。 首先,我们看到一个名为“JBPM数据库表说明.doc”的文件,这暗示了...
标题 "Liferay扩展环境 Liferay Ext" 涉及到的是Liferay门户平台的一个关键概念,Liferay Ext是用于扩展和定制Liferay功能的核心工具。Liferay是一个开源的企业级内容管理平台,它允许用户根据需求构建自定义的数字...
在Liferay中实现SSO(Single Sign-On)单点登录功能,可以让用户在一个系统登录后,无需再次输入凭证就能访问其他关联系统,极大地提高了用户体验。其中,CAS(Central Authentication Service)是一个广泛应用的...
Liferay是一款开源的企业级Portal平台,它提供了丰富的功能和高度可定制性,广泛...如果你在过程中遇到任何问题,记得参照官方文档或联系提供帮助的人。在实践中不断探索和学习,你将能更好地驾驭Liferay的开发工作。
开发过程中,开发者需要理解Liferay的portlet生命周期,以及如何利用Liferay的服务API来处理数据操作。 总的来说,Liferay入门帮助文档是一个宝贵的资源,它不仅提供了Liferay的基础知识,还详细阐述了如何配置开发...
通过深入源码,我们可以学习到如何在Liferay中创建portlet、theme、布局、服务等组件,以及如何处理权限、国际化和缓存等问题。此外,Liferay还使用了Hibernate进行持久化,了解这部分源码能帮助我们更好地进行...
首先,让我们了解MVC模式在Liferay中的应用。在Liferay Portal中,Portlet是展示内容的基本单元,它可以通过MVC模式来实现业务逻辑、数据处理和视图呈现的分离。MVC架构允许开发者将程序分为三个主要部分:模型...
1. **Portal Server**:这是Liferay的核心,负责处理请求、渲染页面和提供服务。 2. **Portlets**:Liferay支持多种类型的portlet,它们是可重用的UI组件,可以在门户页面上展示各种内容和服务。 3. **Themes**和**...
《Liferay Portal 6.0.6 学习手册》是针对企业级开源门户平台Liferay Portal的一个详细学习指南,由作者李少华编写。本文将深入探讨Liferay Portal的基础知识,安装配置,源码分析,开发环境设置,以及基于Struts2的...
书中涵盖了从安装配置到创建自定义portlet、主题和布局的全过程,还讨论了Liferay的安全性和性能优化,帮助读者将Liferay应用于实际项目中。 《Liferay Portal Systems Development》则更侧重于Liferay的系统开发...