首页 > Web开发 > 详细

CKEditor与CKFinder学习--CKFinder源码修改自定义上传文件名

时间:2016-03-26 06:51:45      阅读:352      评论:0      收藏:0      [点我收藏+]

CKFinder的系列文章到目前应该说基本可以满足开发需求了,不过还有一个小细节,CKFinder默认上传的文件名和源文件名一致,如果文件名重复会自动添加编号“(1)”“(2)”等。

技术分享

如果需要自定义上传的文件名怎么办呢?

先看效果

采用uuid来命名
技术分享

时间戳作为前缀
技术分享

下面给出两种方案来实现ckfinder自定义文件名的方法,第一种只是思路,重点是第二种方法。我们通过修改ckfinder的源码来实现ckfinder上传文件名的自定义

方法一 自己捕获图片按钮提供上传

可以捕获图片按钮的点击事件

技术分享

像捕获其他按钮的事件一样。

技术分享

关于事件的捕获参考

http://blog.csdn.net/frankcheng5143/article/details/50946142

这个方法不是本文的重点,本文的重点是第二中方法。

方法二 修改CKFinder的源码

本文介绍这种方法,如何修改CKFinder的源码来自定义上传文件的文件名。

本文讲介绍如何加载ckfinder的源码,然后修改上传文件重命名的代码,最后将修改后的代码打包成jar包。

下载源码

去ckfinder的官网下载,我下载的是Java版本

https://cksource.com/ckfinder/download

目前的最新版下载地址

https://download.cksource.com/CKFinder/CKFinder%20for%20Java/2.6.0/ckfinder_java_2.6.0.zip?

技术分享

其中的_source就是源代码,将其解压。

技术分享

我们发现其源代码是一个Maven工程。

ok,首先确保电脑上成功安装了Maven。Eclipse里也成功配置了Maven。

加载源码

打开Eclipse

File -> Import 选择Existing Maven Projects,然后Next

技术分享

浏览刚才解压的位置,然后Finish

技术分享

稍等片刻,Eclipse会加载

技术分享

如果现在报错,先不用管等构建完成,构建的时候有些错误会消失。

技术分享

修改源码

我们需要修改的代码在CKFinder下
我们需要修改com.ckfinder.connector.handlers.command下的FileUploadCommand.java

技术分享

通过注释我们发现有一个字段叫newFilename就是它了

定位到validateUploadItem方法

技术分享

    private boolean validateUploadItem(final FileItem item, final String path) {

        if (item.getName() != null && item.getName().length() > 0) {
            this.fileName = getFileItemName(item);
        } else {
            this.errorCode = Constants.Errors.CKFINDER_CONNECTOR_ERROR_UPLOADED_INVALID;
            return false;
        }
        // 就是这一行代码来重命名的

        this.newFileName = this.fileName;

        // 下面的代码省略了,因为也不会动它们
    }

我将上传的文件名采用uuid进行重命名。

也可以在文件名前面加上时间戳,这个根据自己的需求来定。

代码如下

        // 文件后缀名
        String extentsion = FileUtils.getFileExtension(this.fileName); 
        String uuid = UUID.randomUUID().toString(); 
        // 去掉“-”符号 
        String id = uuid.substring(0,8)+uuid.substring(9,13)+uuid.substring(14,18)+uuid.substring(19,23)+uuid.substring(24); 
        this.newFileName = id+"."+extentsion;

        // this.newFileName = this.fileName;

如果像以时间戳作为前缀可以这么改

    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    String prefix = sdf.format(new Date());
    this.newFileName = prefix+"-"+this.fileName;

好了,代码修改完毕。

打包源码

Run AS Maven build( 注意是下面的 )

技术分享

在Goals 中输入package,然后点击Run

技术分享

看到如下信息说明打包成功。

技术分享

进入源代码的文件夹,我们发现在CKFinder目录下多了一个target目录

技术分享

target目中中的CKFinder-2.6.0.jar就是我们打包后生成的jar

技术分享

至此jar包已经生成,最后一步就是替换以前的jar。为了有所区别,我将生成的CKFinder-2.6.0.jar重命名为CKFinder-uuid-2.6.0.jar

部署测试

将项目中引用的CKFinder-2.6.0.jar替换为自己修改过的CKFinder-uuid-2.6.0.jar

技术分享

运行并测试

技术分享

我们发现上传了一个ubuntu-alt.png的文件,在服务器被重命名为0ed3be8dc1a14bec9b6326edd3fde511.png

CKFinder-uuid-2.6.0.jar的下载地址

http://download.csdn.net/detail/frankcheng5143/9472382

参看文献

http://blog.csdn.net/cuihaiyang/article/details/6526190

CKEditor与CKFinder学习--CKFinder源码修改自定义上传文件名

原文:http://blog.csdn.net/frankcheng5143/article/details/50978144

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!