美文网首页程序员
ckfinder解决不同用户不同文件夹上传的解决过程

ckfinder解决不同用户不同文件夹上传的解决过程

作者: 晴天M雨天 | 来源:发表于2020-04-04 00:00 被阅读0次

1首先先说一下问题;ckfinder组件的配置文件,几个对应的url;
<baseDir>/aaa/userfiles</baseDir>
<baseURL>127.0.0.1:22/img/</baseURL>
<sftpDir>img/</sftpDir>
sftpDir 为sftp上传文件的路径地址;
解决问题的思路是 在用户登录的时候,根据用户的id属性建立用户自己对应的文件夹目录,这样就可以把用户的图片分离开了;用户每次找的时候进入的是自己对应id的文件夹下的图片;
思路是这样但是问题如下;
1路径是配置文件配置好的,所以目前解决问题的方法是动态指定sftpDir地址;
首先想到问题的解决思路就是通过mxl 解析通过设置属性参数从新写回xml数据;但是看了项目目前的配置 ckfinder 的配置类是在项目启动的时候就加载的,于是看网上博文有没有解决方法,还确实有一个博文有思路,
思路如下;
在用户登录的时候 加载ckfinder.xml 配置文件 解析文件并写回文件, 然后就完了。。。。也是很无奈。只能自己想办法。
然后去官网 看到了java修改配置的方法;
自己写一个配置类继承Configuration;
复写其中的方法;我首先复写了init 方法,但是因为启动的时候没有用户信息,只执行一次 ,方案失败 ---总结失败原因对init方法理解不是很透彻;
然后又看到了一个方法;
createConfigurationInstance ,复写此方法可以创建Configuration对象;
可以在此过程中 读取ckfinder.xml配置文件信息,动态修改生成所需要的的Configuration对象,最后发现并没有成功,系统在启动的时候已经加载的配置文件 源码中的 private String sftpDir; 为私有属性,已经与xml中的属性配对,此时在修改已经没有作用;那有没有什么方法可以方位父对象的私有属性,此时的我想到了反射;
于是修改代码如下;
@Override
protected Configuration createConfigurationInstance() {
Principal principal = (Principal) UserUtils.getPrincipal();//用户信息
if (principal == null) {
return new CKFinderConfig(this.servletConf);
}
try {
Class<?> clazz=this.getClass().getSuperclass();
Field field=clazz.getDeclaredField("sftpDir");
field.setAccessible(true);
Object fieldValue = field.get(this);//文件路径
field.set(this,Global.basesftpDir+principal.getId()+"userImage"+"/");//设置用户相关的id文件夹路径
System.out.println(Global.basesftpDir+principal.getId()+"userImage"+"/");
//检测用户是否第一次登陆,第一次登陆创建服务器文件夹;
ChannelSftp connectIP = FtpUtils.getConnectIP();
boolean dirExist = FtpUtils.isDirExist(Global.basesftpDir+principal.getId()+"userImage"+"/", connectIP);
if(!dirExist){
FtpUtils.createDir(Global.basesftpDir+principal.getId()+"userImage"+"/", connectIP);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
CKFinderConfig a =new CKFinderConfig(this.servletConf);
return a;
};
问题的最终解决;
总结解决的过程和去掉不必要走的弯路;
1明确解决什么问题;
2初步设置解决问题的方案;
3熟悉插件在项目中的配置;
4熟悉插件的加载机制和配置方法;有必要的话debug源码了解其流程
5在配置方法和加载过程中插入自己所需要的逻辑;
6知识的运用 比如反射 xml解析等相关知识;

相关文章

  • ckfinder解决不同用户不同文件夹上传的解决过程

    1首先先说一下问题;ckfinder组件的配置文件,几个对应的url; /aaa/userfiles 127.0...

  • 定义产品需求

    面对同样的用户需求,针对不同的人,会提供不同的解决方案,从需求到提供产品方案的过程,可以定义为产品需求的过程,如何...

  • 如何定义产品需求?(干货)

    面对同样的用户需求,针对不同的人,会提供不同的解决方案,从需求到提供产品方案的过程,可以定义为产品需求的过程,如何...

  • 2020-12-04

    维修过程中对于遇到的问题要想办法解决,跟据不同的问题想不同的解决方案,找到一个合适的解决方法来解决问题。

  • 2020-12-01

    维修过程中遇到问题要想办法解决,根据原理分析方法,得出解决方案,要多想办法,根据不同的问题找到不同的解决方案。

  • html中文本折叠问题解决

    在html中,文本过长是经常遇到的问题,解决过程中有不同场景,不同的解决方法。 单文本 多文本 万能js解决 在n...

  • 以 Huffman coding 为例看函数式编程

    不同编程即为不同解决问题的思路 解决一个问题有很多思路,比如: 过程式(C语言):将解决问题的方式分解成若干步骤来...

  • 以 Huffman coding 为例看 Golang 实用主义

    不同编程即为不同解决问题的思路 解决一个问题有很多思路,比如: 过程式(C语言):将解决问题的方式分解成若干步骤来...

  • 关于营销

    基于不同消费场景寻找相同用户 基于用户场景迁移提供解决方案

  • 2020-12-07

    2020.12.6今日感悟:路的不同,心情的感觉思绪不同,接受理念不同,沟通过程也不同,解决的方案方式也会不同;放...

网友评论

    本文标题:ckfinder解决不同用户不同文件夹上传的解决过程

    本文链接:https://www.haomeiwen.com/subject/yylrphtx.html