Liferay中让人郁闷的图片处理 Print E-mail
User Rating: / 1
PoorBest 
Portal门户 - Liferay相关
Wednesday, 21 May 2008 07:50
      前段时间在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 代码
 
  1. // 上传处理类  
  2. UploadPortletRequest uploadReq = PortalUtil  
  3.                     .getUploadPortletRequest(req);  

一、我们可以通过以上方法获得一个uploadReq来处理上传的图片。
二、uploadReq的使用
java 代码
 
  1. // 获取表单的图片信息  
  2. File PRODUCT_IMG = uploadReq  
  3.                     .getFile(ProductDisplayTerms.PRODUCT_IMGID);  //上传表单的name
  4. byte[] bytes = FileUtil.getBytes(PRODUCT_IMG);  
  5.   
  6. Long imageId = new Long(rs.getLong(ProductDisplayTerms.PRODUCT_IMGID));  
  7. if ((bytes != null) && (bytes.length > 0)) {  
  8.     imageId = ProductUtil.createImageId();  
  9.     ImageLocalServiceUtil.updateImage(imageId.longValue(), bytes,  
  10.                         "jpeg"63631);  
  11. }  

Liferay中新增和更新图片都是使用updateImage方法,是ImageLocalServiceUtil类的静态方法,该 类中还包含有其他包含对图片的操作,如:删除图片等等。查看SOURCE可以很直观的了解ImageLocalServiceUtil的相关信息。
Liferay4.3.2中,updateImage的参数分别是:,updateImage(long 图片id,bytes[] 字节数组,"图片格式","高度","宽度","大小")。为了方便,以下是Liferay处理图片类的源码

java 代码
 
  1. public class ImageLocalServiceImpl extends ImageLocalServiceBaseImpl {  
  2.   
  3.         //删除图片  
  4.     public void deleteImage(long imageId) throws SystemException {  
  5.         try {  
  6.             if (imageId > 0) {  
  7.                 ImageUtil.remove(imageId);  
  8.             }  
  9.         }  
  10.         catch (NoSuchImageException nsie) {  
  11.         }  
  12.     }  
  13.   
  14.         //查找数据库中PK为imageId的Image对象  
  15.     public Image getImage(long imageId)  
  16.         throws PortalException, SystemException {  
  17.   
  18.         return ImageUtil.findByPrimaryKey(imageId);  
  19.     }  
  20.   
  21.         //查找数据库中所有图片信息  
  22.     public List getImages() throws SystemException {  
  23.         return ImageUtil.findAll();  
  24.     }  
  25.   
  26.         //查找数据库中从begin开始到end的图片信息  
  27.     public List getImages(int begin, int end) throws SystemException {  
  28.         return ImageUtil.findAll(begin, end);  
  29.     }  
  30.   
  31.         //获得size为指定大小的图片对象  
  32.     public List getImagesBySize(int size) throws SystemException {  
  33.         return ImageUtil.findBySize(size);  
  34.     }  
  35.   
  36.         //更新或保存图片  
  37.     public Image updateImage(  
  38.             long imageId, byte[] bytes, String type, int height, int width,  
  39.             int size)  
  40.         throws SystemException {  
  41.   
  42.                 //查找PK为imageId的图片  
  43.         Image image = ImageUtil.fetchByPrimaryKey(imageId);  
  44.                 //若图片不存在,表示为新增图片,用传递的imageId参数创建一个IMAGE。  
  45.                 //注意这里的imageId不要和数据库的重复,建议做一些处理  
  46.         if (image == null) {  
  47.             image = ImageUtil.create(imageId);  
  48.         }  
  49.                 //设置相关字段信息  
  50.         image.setModifiedDate(new Date());  
  51.         image.setTextObj(bytes);  
  52.         image.setType(type);  
  53.         image.setHeight(height);  
  54.         image.setWidth(width);  
  55.         image.setSize(size);  
  56.                 //更新保存  
  57.         ImageUtil.update(image);  
  58.   
  59.         return image;  
  60.     }  
  61.   

 
Banner

本站文章均来自网络为方便大家阅读之用,如有侵权,请联系我们,我们收到后立即删除,谢谢!另文章言论不代表本站观点。

 
上海定制公寓:瑞虹新城3期
瑞安房地产推出上海内环住宅瑞虹新城3期,该楼盘首推“定制公寓”概念,大胆借鉴国际前沿的设计理念,在上海北外滩打造精致优雅的国际现代化上海虹口高品质住宅小区。

娱乐竞拍:噢耶竞拍网
噢耶竞拍网提供低价竞拍、抢拍、竞猜,为您提供低价购物、娱乐购物以及娱乐竞猜,噢耶团队为您提供竭诚服务,开心又刺激的娱乐购物新体验就在噢耶竞拍网

zhishi123.com.cn广告