Liferay theme上传logo的详细分析

结论:

theme上传logo会做以下事情:

(1)用UploadPortletRequest对象来处理页面的<input type=file>

(2)对于上传的logo图片为空,则抛出异常。

(3)对于上传的logo图片不为空,则先从数据库中找到当前layout,为logo定义logoId,并吧logoId添加到当前layout并存回数据库,然后根据布尔变量设定,来决定是否吧这个logo关联到hook,以及这个这个logo图片是否要持久化。

过程展示:

当在Liferay中的某个theme选择上传logo,并点击"save"按钮:

如下所示

具体分析:

它会去触发struts动作/group_pages/edit_layout_set,我们在struts-config.xml中找到匹配选项:

<action path="/group_pages/edit_layout_set" type="com.liferay.portlet.layoutsadmin.action.EditLayoutSetAction">
            <forward name="portlet.layouts_admin.edit_layouts" path="portlet.layouts_admin.edit_layouts" />
            <forward name="portlet.layouts_admin.error" path="portlet.layouts_admin.error" />
        </action>

可以发现,它对应的动作类是EditLayoutSetAction类的updateLogo方法:

protected void updateLogo(
            ActionRequest actionRequest, long liveGroupId,
            long stagingGroupId, boolean privateLayout, boolean hasLogo)
        throws Exception { 

        UploadPortletRequest uploadPortletRequest =
            PortalUtil.getUploadPortletRequest(actionRequest); 

        boolean useLogo = ParamUtil.getBoolean(actionRequest, "useLogo"); 

        InputStream inputStream = null; 

        try {
            File file = uploadPortletRequest.getFile("logoFileName"); 

            if (useLogo && !file.exists()) {
                if (hasLogo) {
                    return;
                } 

                throw new UploadException("No logo uploaded for use");
            } 

            if (file.exists()) {
                inputStream = new ByteArrayFileInputStream(file, 1024);
            } 

            if (inputStream != null) {
                inputStream.mark(0);
            } 

            LayoutSetServiceUtil.updateLogo(
                liveGroupId, privateLayout, useLogo, inputStream, false); 

            if (inputStream != null) {
                inputStream.reset();
            } 

            if (stagingGroupId > 0) {
                LayoutSetServiceUtil.updateLogo(
                    stagingGroupId, privateLayout, useLogo, inputStream, false);
            }
        }
        finally {
            StreamUtil.cleanUp(inputStream);
        }
    }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索inputstream
logo
liferay theme、liferay theme 开发、liferay 7 theme开发、liferay theme js、liferay 7.0 theme,以便于您获取更多的相关知识。

时间: 2024-10-16 03:33:35

Liferay theme上传logo的详细分析的相关文章

phpcms v9升级后台无法上传缩略图的原因分析

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 phpcms V9 是目前国内使用人数最多的一款开源免费的CMS系统,正是由于他的免费性,开源性,以及其自身的功能性比较强大,所以倍受许多站长朋友们的亲来,以及许多的公司的喜欢.phpcms也为了完善程序漏洞,官方人员会经常性的发布一些程序补丁,让用户使用.防止一些特殊群体,通过程序的漏洞去攻击别人的网站.不过这次更新了phpcms v9之后

你不知道的文件上传漏洞php代码分析

漏洞描述 开发中文件上传功能很常见,作为开发者,在完成功能的基础上我们一般也要做好安全防护. 文件处理一般包含两项功能,用户上传和展示文件,如上传头像. 文件上传攻击示例 upload.php <?php $uploaddir = 'uploads/'; $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); if (move_uploaded_file($_FILES['userfile']['tmp_name'],

php文件上传$_FILES move_uploaded_file详细说明

第一种比较简单就是files利用index.php教程接入值就成了,没经过判断,都会用到move_uploaded_files与files[]全局变量如下 第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error".就像这样: $_files["file"]["name"] -

求struts2上传文件代码,最好详细些。新手

问题描述 急,求上传例子,百度那些我都看过,有没有真实的例子. 解决方案 解决方案二: 解决方案三:马上能给你写一个简单的例子,^_^解决方案四:你自己参照着改成s2的吧解决方案五:action://文件上传下载相关属性privateFilefile;privateStringfilename;privateStringfileFileName;privateStringfileContentType;privateStringsavePath;//上传文件publicStringupload(

ThinkPHP实现带验证码的文件上传功能

在模板中我们只需要调用就可以了  代码如下 复制代码 <html> <head> <title>验证码</title> </head> <body> <formaction='__URL__/login'method='post'enctype="multipart/form-data"> 文件上传:<inputtype='file'name='imgage'><br/> 验证码

Asp.net文件上传操作

asp.net|上传 在ASP里要上传一个文件是很麻烦的事,需要稻香老农之类的组件的支持.在ASP.Net事情就变得简单了许多.如下面上传图片的例子.首先申明使用命名空间.using System.IO;在设计页面拖进一个input(File)控件,并把它作为服务器控件运行.其ID为myFile:然后拖进一个button,给button的单击时间添加如下代码: protected void submit_Click(object sender, EventArgs e)    {        

利用ASP.NET向服务器上传文件

asp.net|服务器|上传 文件上传技术是一个很实用的技术,有着很广泛的应用,在ASP.NET自身的前一个版本ASP里实现这个功能,就必须使用第三方的组件或者自己开发组件了,现在,用ASP.NET实现起来就简单得多了,我们不需要使用任何组件就可以实现上传的功能了.    为了方便讲解,我们可以把文件上传分成两种类型:单一文件上传和多文件上传.        单一文件上传    我们先来介绍单一文件上传的方法,单一文件上传就比较简单了,     下面是实现单一文件上传的完整代码:<%@ Impo

java使用smartupload组件实现文件上传的方法

 这篇文章主要介绍了java使用smartupload组件实现文件上传的方法,对比分析了使用组件与不使用组件实现文件上传的区别,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了java使用smartupload组件实现文件上传的方法.分享给大家供大家参考.具体分析如下: 文件上传几乎是所有网站都具有的功能,用户可以将文件上传到服务器的指定文件夹中,也可以保存在数据库中,这里主要说明smartupload组件上传. 在讲解smartupload上传前,我们先来看看不使用组件是怎么完成上传

jquery插件ajaxupload实现文件上传操作_jquery

本文实例讲述了jquery插件ajaxupload实现文件上传操作代码.分享给大家供大家参考.具体如下: 运行效果截图如下: 图1 文件上传前 图2 文件上传后 具体代码如下: 1.创建页面并编写HTML 上传文档:  <div class="uploadFile"> <span id="doc"><input type="text" disabled="disabled" /></s