广告
返回顶部
首页 > 资讯 > 后端开发 > Python >CMS之图片管理(3)
  • 349
分享到

CMS之图片管理(3)

图片CMS 2023-01-31 01:01:09 349人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

现在要完成目录的编辑操作。因为目录的编辑只是改变目录名称,因而使用Cellediting插件就可完成工作。根据书11.3.2节的示例,要完成这个不难,首先在目录树的定义中加入以下语句隐藏列标题:hideHeaders:true, 接着添加p

现在要完成目录的编辑操作。因为目录的编辑只是改变目录名称,因而使用Cellediting插件就可完成工作。
根据书11.3.2节的示例,要完成这个不难,首先在目录树的定义中加入以下语句隐藏列标题:
hideHeaders:true,
 
接着添加plugins配置项来配置CellEditing插件。因为根目录是不运行编辑的,因而需要监听beforeedit事件,如果当前选择节点是根目录就返回false,不允许编辑,代码如下:
plugins:[{ ptype: "cellediting",
    listeners: {
        beforeedit: function (edit, e) {
            if (e.record.isRoot()) returnfalse;
        }
    }
}],
 
继续定义columns配置项,为目录添加编辑控件,代码如下:
columns:[
     { xtype: "treecolumn", dataindex:"text", flex: 1,
        field: { allowBlank: false, selectOnFocus: true }
     }
],
 
最后定义viewConfig配置项,取消树节点默认的双击操作,代码如下:
viewConfig:{
     toggleOnDblClick:false
},
 
好了,现在要考虑的是修改后的提交问题了。Cellediting插件在编辑完成后,会触发edit事件,因而在这时候提交数据是最合适的,代码如下:
edit:function(edit,e){
     e.record.save({
            success:function(rec,opt){
                    opt.records[0].setId(opt.records[0].data.parentId+opt.records[0].data.text+"/");
                    opt.records[0].commit();
            },
            failure:function(e,op){
                    op.records[0].reject();                                     
                    Ext.Msg.alert("发生错误",op.error);
            }
     });
}
 
在edit事件中,它的第2个参数会返回修改后的记录,因而直接调用模型的save方法就可提交数据了。如果提交成功后需要根据返回数据修改记录的id,并调用commit方法确认修改。如果修改失败,就要调用reject方法取消修改。
 
现在切换回Folder控制器,完成编辑操作的服务器端代码,基本过程与Add方法类似,因而可以直接复制粘贴一下,修改方法名和具体处理过程就行了,代码如下:
[ajaxAuthorize(Roles= "普通用户,系统管理员")]
publicJObject Edit()
{
    bool success = false;
    string msg = "";
    jarray ja = null;
    try
    {
        string data = Request["data"]?? "";
        if (string.IsNullOrEmpty(data))
        {
            msg = "错误的提交数据。";
        }
        else
        {
            ja = JArray.Parse(data);
            if (ja.Count > 0)
            {
                JObject jo = (JObject)ja[0];
                string parentDir =(string)jo["parentId"];
                string foldername =(string)jo["text"];
                string dirPath =Server.MapPath(root + parentDir);
                string oldPath = Server.MapPath(root +(string)jo["id"]);
                if (Directory.Exists(oldPath))
                {
                    if(Directory.Exists(dirPath + foldername))
                    {
                        msg = "目录已经存在";
                    }
                    else
                    {
                        Directory.Move(oldPath,dirPath + foldername);
                        jo["id"] =parentDir + foldername + "/";
                        success = true;
                    }
                }
                else
                {
                    msg = "要修改的目录不存在";
                }
 
            }
            else
            {
                msg = "错误的提交数据。";
            }
        }
    }
    catch (Exception e)
    {
        msg = e.Message;
    }
    returnHelper.MyFunction.WriteJObjectResult(success, 0, msg, ja);
}
 
至此,目录的全部操作就完成了。如果想功能更完善,最好加入目录拖拽功能,这个笔者就不做了,有兴趣的自己可根据书的内容去完成。
 
现在要完成的是单击树节点,在图片列表中显示该目录下的图片文件。要做的就是监听树的selectionchange事件,这个可参考书中的11.3.4节的示例,具体代码如下:
selectionchange:function (model, sels) {
    var me = this;
    if (sels.length > 0) {
        var rs = sels[0],
                    store = me.filestore;
        store.proxy.extraParams.path =rs.data.id;
        store.loadPage(1);
    }
    me.tree.down("button[tooltip=删除目录]").setDisabled(sels.length ==0);
 
}
 
现 在来完成返回文件数据的控制,创建一个名称为FileController的控制器。加入必要的引用后,和Folder控制器一样,加入一个root的字 符串变量来指定根目录。因为File控制器的List方法与Folder的差不多,因而可以直接复制过来修改。修改后的代码如下:
[AjaxAuthorize(Roles= "普通用户,系统管理员")]
publicJObject List()
{
    bool success = false;
    string msg = "";
    JArray ja = new JArray();
    int total = 0;
    try
    {
        int start = 0;
       int.TryParse(Request["start"], out start);
        string path = Request["path"]?? "/";
        DirectoryInfo dir = newDirectoryInfo(Server.MapPath(root + path));
        total = dir.GetFiles().Count();
        foreach (var c indir.GetFiles().OrderByDescending(m => m.LastWriteTime).Skip(start).Take(50))
        {
            ja.Add(new JObject {
                newJProperty("path",path),
                newJProperty("filename",c.Name),
                newJProperty("modify",c.LastWriteTime.ToString("yyyy-MM-ddhh:mm")),
                newJProperty("size",c.Length)
            });
        }
        success = true;
 
    }
    catch (Exception e)
    {
        msg = e.Message;
    }
    returnHelper.MyFunction.WriteJObjectResult(success, total, msg, ja);
}
 
从代码中可以看到,使用LINQ真的太方便了,分页就是小菜一碟。目前暂时只设置了使用最后修改时间排序,等下再研究怎么修改排序。
现 在还不能进行测试,因为要解决图片的缩略图显示问题。本示例,不用为每一个上传的图片生成缩略图,只要直接上传就好了,因为NuGet上有一个名称为 ImageResizer.mvc的包,非常好用,它会自动根据请求生成缩略图。在主菜单选择工具>库程序包管理>管理解决方案的NuGet 程序包打开管理NuGet程序包窗口,然后搜索ImageResizer,找到ImageResizer.MVC后,选择安装。
安装后,还要在WEB.convfig文件进行配置。打开WebConfig文件,首先在configuration段内添加以下代码为ImageResize添加一个配置段:
<configSections>
     <section name="resizer"type="ImageResizer.ResizerSection"requirePermission="false" />
</configSections>
 
然后添加以下配置:
  <resizer>
    <plugins>
      <!-- So all the sample projects canshare the same p_w_picpath folder-->
      <add name="VirtualFolder"virtualPath="~/Thumbnail/" physicalPath=".\Upload" />
      <!-- So Mvc doesn't prevent the p_w_picpathresizer from working -->
      <add name="MvcRoutingShim"/>
      <add name="DiskCache" />
    </plugins>
 </resizer>
 
配置中,VirtualFolder的作用是将虚拟目录和物理目录关联起来,其中的virtualPath就是要定义的虚拟目录,在这里是“~/Thumbnail/”,而对应的物理目录physicalPath就是“.\Upload”。
配置DiskCache的作用是开启磁盘缓存,它会把生成的缩略图缓存在磁盘上,这样就不用访问相同的缩略图时,每次都要去生成了。
接着在system.web段内添加以下配置:
<HttpModules>
  <add name="ImageResizingModule"type="ImageResizer.InterceptModule" />
</httpModules>
 
那么它是如何工作的呢?切换回PicManager.js文件,找到DataView定义的模板,会看到图片的显示是这样的:
<img width="160"height="160"src="../Thumbnail{path}{filename}?width=160& height=160"data-Qtip="文件名:{filename}<br/>修改日期:{modify}<br>大 小:{size:this.filesize}"/><br/>
 
在src定义的路径中,会看到文件名后多了参数width和height的定义,而ImageSize在路由中检查到访问的虚拟路径时,就会根据width和height的定义来将图片转换为缩略图所需的宽度和高度,然后返回给客户端,非常的方便。
把一些图片复制到根目录,然后重新生成一下解决方案,在浏览器中打开图片管理,将看到如图33的效果。

Oh,NO!DataView居然显示出错了。用Firebug检查每个视图条目,居然宽度是占满一行的,仔细看了一下样式定义,居然发现条目上定义的样式没有,很显示是忘记在app.CSS内定义条目的样式了。于是把以下样式定义追加到app.css文件内:
.p_w_picpathList{float:left;display:block;width:180px;height:200px;padding:10px;}
.selected{background-color:#D3E1F1;}
.overitem{background-color:#E7E7E7;}
.p_w_picpathListp{
     text-align:center;
     overflow:hidden;
     line-height:22px;
}
.ellipsis{-o-text-overflow:ellipsis;text-overflow:ellipsis;-moz-binding:url('ellipsis.xml#ellipsis');white-space:nowrap;overflow:hidden;}
.x-view-selector{
    position: absolute;
    border: 1px dotted #3399BB;
}
 
刷新一下页面,如图34,视图显示正常了。
 
好了,今天就到这了。

源代码地址:http://vdisk.weibo.com/s/gFNr7

--结束END--

本文标题: CMS之图片管理(3)

本文链接: https://www.lsjlt.com/news/184980.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • CMS之图片管理(3)
    现在要完成目录的编辑操作。因为目录的编辑只是改变目录名称,因而使用Cellediting插件就可完成工作。根据书11.3.2节的示例,要完成这个不难,首先在目录树的定义中加入以下语句隐藏列标题:hideHeaders:true, 接着添加p...
    99+
    2023-01-31
    图片 CMS
  • Linux之进程管理(3)作业管理
    Linux之进程管理(3)作业管理Linux的作业控制介绍:前台作业:通过终端启动,且启动后一直占据终端;后台作业:可通过终端启动,但启动后转入后台运行(释放终端);让进程作业运行在后台:1、对运行中的进程:使用Ctrl+z2、尚未启动的作...
    99+
    2023-01-31
    作业 进程 Linux
  • MySQL专题3之MySQL管理
    1、启动以及关闭MySQL服务器-  首先,我们需要通过以下命令来检查MySQL服务器是否已经启动:ps -ef | grep mysqld-  如果MySQL已经启动,以上命令将输出mysql进程列表,如果mysql未启动,你可以使用以下...
    99+
    2023-01-31
    专题 MySQL
  • Python图片处理之图片裁剪教程
    目录一、操作流程二、代码分析三、懒人一键复制代码一、操作流程 首先复制代码会吧? 1.有张照片 这是网上随便找的一张照片,自行保存测试 2.看看照片 运行代码,其中show_img...
    99+
    2022-11-12
  • Python图片处理之图片采样处理详解
    目录一.图像采样处理原理二.图像采样实现三.图像局部采样处理四.总结一.图像采样处理原理 图像采样(Image Sampling)处理是将一幅连续图像在空间上分割成M×N...
    99+
    2022-11-13
  • android图片处理之让图片变成圆形
    这几天做项目,有些地方的图片需要用到圆形图片,所以百度了一下,在github上找到一个开源项目,处理很简单,效果如下:   使用起来特别简单,一共三步,具体如下:...
    99+
    2022-06-06
    Android
  • 图形图像处理之简单图片
    决定Android应用是否被用户接受的一个重要的原因就是用户界面,友好的用户界面就需要使用到图形图像处理技术,包括静态图片、动画和游戏都需要大量的图形图像处理,所谓游戏,其实就是提供更逼真,能模拟某种环境的用户界面,并根据某种规则响应用户的...
    99+
    2023-06-04
  • Android中3种图片压缩处理方法
    Android中图片的存在形式: 1:文件形式:二进制形式存在与硬盘中。 2:流的形式:二进制形式存在与内存中。 3:Bitmap的形式 三种形式的区别: 文件形式和流的...
    99+
    2022-06-06
    压缩 方法 图片 图片压缩 Android
  • 用python简单处理图片(3):添加水
    一、添加文字水印 from PIL import Image, ImageDraw,ImageFont im = Image.open("d:/pic/lena.jpg").convert('RGBA') txt=Image.new...
    99+
    2023-01-31
    简单 图片 python
  • android图片处理之让图片一直匀速旋转
    本文是在我的文章android图片处理,让图片变成圆形 的基础上继续写的,可以去看看,直接看也没关系,也能看懂  1、首先在res文件夹下创建一个名字为anim的文件...
    99+
    2022-06-06
    Android
  • Python图片处理之图片裁剪的示例分析
    小编给大家分享一下Python图片处理之图片裁剪的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、操作流程首先会吧?有张照片这是网上随便找的一张照片,自行保存测试看看照片运行代码,其中show_img函数是展示照...
    99+
    2023-06-15
  • RAW图片处理工具DxO PhotoLab 3 for Mac v3.3.1
    图片处理工具那个号?DxO PhotoLab Mac版是Mac平台上的一款数码照片处理软件。DxO PhotoLab Mac版拥有强大的图像处理功能和编辑逻辑,让你简简单单的处理那张属于自己的照片。 作为一...
    99+
    2022-10-18
  • Django之图书管理系统
              出版社的增删改查  展示出版社列表:    1. 创建一个表结构:           2. 再配合那俩条命令即可创建一个press表          创建出版社函数,并在url中进行配置          创建HT...
    99+
    2023-01-30
    图书管理系统 Django
  • Docker管理之碎片知识整理小结
    目录一、概述二、应用示例2.1、Docker容器隔离之Namespace2.2、Docker之自由限制cgroup2.3、给运行中的容器设置端口映射2.4、修改运行中docker容器...
    99+
    2022-11-12
  • Java基础之简单的图片处理
    目录一、前言二、依赖三、封装数据类四、常量类五、图像处理类六、效果图一、前言 先使用一个模板图片,在图片上添加图片或者文字都可以。 二、依赖 <dependency>...
    99+
    2022-11-12
  • ImageRanger Pro Edition for Mac(图片管理器)1.7.2.1543
    哪款Mac 图片管理软件好用?本站推荐ImageRanger Pro Edition软件,ImageRanger 是Mac平台上功能齐全的图片管理软件,内置的强大资源管理器能将本地的图片自动分类排列好,是摄...
    99+
    2022-10-18
  • Java毕业设计实战之图片展览馆管理系统的实现
    一、项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持) 项...
    99+
    2022-11-13
  • Android编程之图片颜色处理方法
    本文实例讲述了Android编程之图片颜色处理方法。分享给大家供大家参考,具体如下: 你想做到跟美图秀秀一样可以处理自己的照片,美化自己的照片吗?其实你也可以自己做一个这样的软...
    99+
    2022-06-06
    程之 方法 图片 Android
  • AndroidDownloadMananger管理器实现下载图片功能
    目录DownloadManager三大组件介绍DownloadManagerDownloadManager.QueryDownloadManager.Request下载图片小案例工具...
    99+
    2023-01-05
    Android DownloadMananger Android DownloadMananger下载图片
  • AndroidFlutter图片处理之高斯模糊的实现
    目录ImageFilter横向模糊垂直模糊xy轴同时模糊用法BackdropFilterImageFiltered区别ImageFilter 在Flutter中,使图片模糊有2种方式...
    99+
    2022-11-13
    Android Flutter高斯模糊 Android 高斯模糊 Flutter 高斯模糊
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作