Coder Social home page Coder Social logo

kohgylw / kiftd-source Goto Github PK

View Code? Open in Web Editor NEW
1.1K 56.0 515.0 50.95 MB

kiftd: An open source sky driver or cloud driver server application! 欢迎访问kiftd源代码资源库!您可以在此获取kiftd源代码,并自由地进行下载和查看。该源代码仓库同时也是开发仓库,因此其版本可能比发行版靠前(但绝不会滞后)。

Java 93.56% CSS 4.02% HTML 2.41%
cloud-driver open-source-cloud-driver sky-driver

kiftd-source's Introduction

欢迎访问kiftd源代码资源库!

Welcome to visit source of kiftd!

当前版本:v1.2.0-RELEASE

简介

kiftd——一款便捷、开源、功能完善的个人&团队&小型团队网盘服务器系统。


kiftd-mainpage.png

kiftd能够帮助您快速搭建起一个面向家庭、团队或组织的网盘系统,它操作简单、高效且功能多样。这里是kiftd的源代码资源库,您可以在这里获得kiftd的源代码,并对其进行下载、阅读与重构。

注:如果您仅仅希望得到一份拿来即用的软件,kiftd也提供了一个完整的、解压即用的编译版。您可以根据其说明在3分钟内快速安装并开始使用。如果您需要该版本,请转到以下位置进行浏览和下载: kiftd-官方主页

构建说明

下列条目为kiftd开发环境的基本信息,如需对源代码进行查看及编译,推荐使用所列配置。

  • JDK版本:1.8.0
  • 项目管理框架:Maven(m2e 1.8.0 for Eclipse),Archetype:mavem-archetype-quickstart 1.1。
  • 编码格式:UTF-8
  • 项目资源及配置:Spring Boot+MyBatis+H2 DB,详见pom.xml文档。

快速开始

  • 使用Eclipse(javaEE)以项目方式导入本资源文件夹,并设置构建路径中的JDK版本。
  • 使用Maven选项更新项目,并确保pom文件中引入的所有外部资源能够正确引入至本地。
  • 打开kohgylw.kiftd.mc.MC类,进行测试运行。
  • 右键项目,执行Run with选项中的Maven install操作以在target文件夹内编译生成jar程序。
  • 将生成的jar程序拷贝到项目主目录下(即与libs等文件夹同级)并开始使用。

提示:源代码路径下包含了一些程序运行所需的非源代码资源(例如程序图标等),某些集成式开发环境(例如IDEA)在编译过程中可能会自动忽略非源代码资源。您需要设置并保证这些资源也能够被正确打包至最终的jar程序内,否则将会导致编译出的程序无法顺利运行。

程序基本结构说明

  • 源代码资源文件夹:/src/main/java/
  • 入口类:kohgylw.kiftd.mc.MC
  • web界面请求处理包:kohgylw.kiftd.server.controller、kohgylw.kiftd.server.filter
  • web界面操作逻辑包:kohgylw.kiftd.server.service
  • 核心功能及文件系统实现包:kohgylw.server.util、kohgylw.kiftd.server.listener、kohgylw.kiftd.server.mapper、kohgylw.kiftd.server.model
  • 服务器行为控制类:kohgylw.server.ctl.KiftdCtl
  • 服务器界面相关包:kohgylw.kiftd.ui、kohgylw.kiftd.printer
  • 独立文件管理模块相关包:kohgylw.kiftd.util.file_system_manager
  • 第三方工具使用许可证包:kohgylw.kiftd.util.licenses
  • web页面静态资源文件夹:/webContext/
  • mybatis映射表文件夹:/mybatisResource/
  • 外部引用资源(编译后生成)文件夹:/libs/
  • 引用字体文件夹:/fonts/
  • 设置文件(程序第一次运行后生成)文件夹:/conf/
  • 日志文件夹:/logs/
  • 编译输出文件夹:/target/
  • maven配置文件:/pom.xml

常见问题&解决方案

  • 使用IDEA导入项目后无法以图形界面方式运行

在默认情况下,IDEA可能会自动忽略位于项目源代码路径内的所有非源代码文件,从而导致图形界面需要的某些图标文件(例如png文件)无法被识别和打包。如遇此问题,请修改IDEA设置,确保项目源代码路径下的所有文件均会被识别和打包。

  • 启动源代码项目时出现“Error creating bean with name org.mybatis.spring.mapper.MapperScannerConfigurer”

如遇该问题,请尝试将pom.xml文件中引入的mybatis资源和mybatis-spring资源移除并重新添加mybatis-spring-boot-starter资源,从而避免默认整合方式可能导致的Spring Boot框架插件兼容性问题(特别鸣谢:用户 michael)。

使用许可(下载该源代码资源即视为接受以下许可)

当前版本的kiftd使用自带的许可文件进行分发。您应该先阅读该文件(获取方式:前往kiftd发行版主页下载一份kiftd发行版并在其中获得,详见 https://github.com/KOHGYLW/kiftd ),并在同意其中的所有条款后再下载该源代码。其大致内容如下:

  • 您可以免费获得该源代码的原版拷贝。
  • 您可以自由地对该源代码进行分发、重构并运用于任何领域。
  • 作者对于使用该源代码造成的任何后果均无需负责。
  • 作者对该源代码具有版权。

关于该源代码...

该源代码为目前发布的kiftd解压即用版的原始编译来源,二者保持一致性(有时源码版本可能会略微超前),作者将在今后对其逐步进行整理以便于用户阅读,由此带来的不便敬请谅解。

联系作者?

如有任何需要(例如对该资源有疑问、意见或建议),请发件联系作者: [email protected] (青阳龙野),随时恭候您的来信!

青阳龙野@kohgylw by 2024年04月23日

kiftd-source's People

Contributors

kohgylw avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kiftd-source's Issues

请问文件路径是一一对应的吗?

比如我在网盘系统里新建了一个文件夹叫text并且上传了一个a.txt 他的目录是/text/a.txt 那么这个文件在服务器里的路径也是/text/a.txt 吗?

H2数据库 默认密码为静态密码,存在安全隐患

再不额外指定MYSQL数据库时,作者会启用H2数据库
但H2数据库再默认情况下存在以下隐患:

  1. 没有外出配置,用户无法自定义数据账号密码
  2. 代码中为静态密码,所有人员检出的代码默认的密码是一致的,容易被攻击

支持树莓派吗

树莓派功耗低、价格便宜,用来做一个小型服务器是一个不错的选择。

打包下载功能不能关闭

在配置文件中,按照说明配置download.zip=disable,并且重新启动服务后, web界面还是还是有打包下载的按键。
调试home.js 866行, folderView.enableDownloadZip的值还是为true;

咨询一个数据库的问题

目前我是启用了mysql数据库连接,但我本身使用的是mariadb,在程序启用后,数据库表正常被创建,但前端直接访问ip+端口正常,但是登陆后无法上传文件,前端体现错误为
提示:出现意外错误,文件:[新建文本文档.txt]上传失败,上传被中断。
后端体现信息为:

2019-05-10 15:42:17.453  INFO 9736 --- [nio-8080-exec-1] o.s.b.f.xml.XmlBeanDefinitionReader      : Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
2019-05-10 15:42:17.483  INFO 9736 --- [nio-8080-exec-1] o.s.jdbc.support.SQLErrorCodesFactory    : SQLErrorCodes loaded: [DB2, Derby, H2, HDB, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]

目前程序是不支持mariadb, 还是其他问题呢

建议:两个关于用户登录界面的建议

应用版本:1.0.16-RELEASE

首先感谢作者开源如此实用的软件!以下是两点关于登录界面的优化建议:

  1. 请不要提供过于详细的登录错误提示信息
    当输入了不存在的账户,页面会提示"账户不存在或未设置",当输入了正确的账户和密码的错误时,页面会提示密码错误或未设置。这样的信息过于详细,是不安全的。这样会让攻击网站的人更容易遍历出用户名和密码。

  2. 建议添加图片验证码
    同样的原因,现阶段登录没有验证码,只需在浏览器控制台执行个简单的脚本,虽然会花点时间,但也是可以暴力破解出用户名和密码的。破解成本很低。
    希望能添加个简单的图片验证码,增加一些破解成本。

Thanks!

Springboot升级到2.4以上

Springboot升级到2.4以上会报Error:Unable to locate the default servlet for serving static content. Please set the 'defaultServletName' property explicitly.

因为2.4以上的Springboot不再默认注册DefaultServlet,需要将server.servlet.register-default-servlet设置为true。

简单的解决办法:

kohgylw/kiftd/server/configation/MVC.java 添加以下代码

@Bean
WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> enableDefaultServlet() {
    return (factory) -> factory.setRegisterDefaultServlet(true);
}

这样网盘适用面极窄

不解

本软件原理是把文件复制到指定目录下的fileblocks并在另一个db文件里建立索引,并没有保留原始文件名,而且也不能直接把已有目录下的文件直接进行分享(必须要要通过本软件的内置工具,原理依然是复制文件到fileblocks并在另一个db文件里建立索引 )

有点遗憾,作者为什么要这样做,安全性没有提高但便利性已经大打折扣。

建议

直接访问原始目录/文件即可,db文件仍然设在软件目录下。然后采用定时扫描目录变动和手动扫描目录变动两种方式搭配来更新索引即可。以 Java 的安全性,仅仅读文件,是可以做到对原始文件零伤害的。

最后,希望软件越来越好....

建议增加ldap登录

如果登录人数稍微多些的话,增加用户就不方便,能连通ldap验证的话情况就会好很多

[New Feature] 与AD集成

可能想法比较片面

起因

  1. 从现阶段看,kiftd 作为一款便捷、开源、功能完善的个人&团队&小型团队网盘服务器系统目前做得确实非常不错了。
  2. 但是也正是因为它的便捷、开源、功能完善,我才会萌生让它与 AD 接轨的想法

集成的优势

  1. 更完善、更灵活的用户和权限管理方式
  2. 适用面人群更广,我觉得一些组织,譬如各大高校会更多的考虑该软件来构建一个组织内部的在线网盘
  3. 开源,无论组织还是个人都不怎么喜欢把自己的数据轻易交给另外一个人。

缺点

  • 开发时人力物力的花销
  • 来自一些比较成熟的软件的挑战(比如:seafile)

长文件名无法上传

kiftd 是我用过的最好搭建的网盘,但是存在一个问题:对于文件名较长的文件无法上传。
希望能尽快修复,谢谢~

上传文件时console提示上传文件太大错误

上传文件时console提示上传文件太大错误
Failed to parse multipart servlet request; nested exception is java.lang.IllegalStateException: The multi-part request contained parameter data (excluding uploaded files) that exceeded the limit for maxPostSize set on the associated connector

如何解决

加入Trash功能

数据无价,为避免冲动付出代价,建议加入Trash功能,创建者可在Trash中看到自己删除的文件,选中删除后再次进行最后的物理删除。当然,也可以改变现有的删除确认窗口,添加Trash和直接删除选项。

insert语句的写法不是最佳实践

image

此处insert语句没有规定字段名,直接插入value。这种写法是不好的。
假设改变了数据库结构,这句话就会报错!
我们一般使用这个格式来insert

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );

而不是

INSERT INTO table_name
                       VALUES
                       ( value1, value2,...valueN );

建议可以加入更为完善的权限体系

首先感谢开源项目的开发者,让我能更快更好地搭建起个人的局域网盘。日常工作中用到的资料,需要一个更加完善的权限体系,我在17版本的基础上,将原来简单的文件夹级别改成了按文件按上下级按群组去自动分配以及可网页端配置的权限体系。但在请求比较密集时,经常会出现查库异常等并发问题,建议开发者能在后续的版本中优化一下这点,你的网盘将会是一个更加强大的存在!在最后,再次感谢开源。

Java版本

它好像只支持Java8,不支持11

很多地方处理异常都有问题

image
image
image

等等,这种处理异常的方式有问题。
1、当出现问题的时候,前端虽然收到了反馈,你后端把这个异常给吞了,并且更加严重的是,没有打印错误日志,这个问题很严重,当我们出现问题的时候,会无处排查
2、当你把错误吞调的时候,就无法使用spring事务框架进行数据回滚了。

边缘问题,springboot版本改成2.0.5会启动不了

平时用的是2.0.5比较多,不想重新下载依赖改成了这个版本,无法启动服务器 报错如下
改成原来的2.0.2可以启动

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'kohgylw.kiftd.server.configation.MVC': Invocation of init method failed; nested exception is java.lang.IllegalStateException: WebApplicationObjectSupport instance [ResourceHttpRequestHandler [locations=[], resolvers=[org.springframework.web.servlet.resource.PathResourceResolver@7bc1f673]]] does not run within a ServletContext. Make sure the object is fully configured!
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1699) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:573) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:372) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1247) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1096) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:535) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:251) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1135) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.getIfAvailable(DefaultListableBeanFactory.java:1706) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration.<init>(DispatcherServletAutoConfiguration.java:135) ~[spring-boot-autoconfigure-2.0.5.RELEASE.jar:2.0.5.RELEASE]
	at org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration$$EnhancerBySpringCGLIB$$2b794115.<init>(<generated>) ~[spring-boot-autoconfigure-2.0.5.RELEASE.jar:2.0.5.RELEASE]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_121]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_121]
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_121]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_121]
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:170) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	... 68 common frames omitted
Caused by: java.lang.IllegalStateException: WebApplicationObjectSupport instance [ResourceHttpRequestHandler [locations=[], resolvers=[org.springframework.web.servlet.resource.PathResourceResolver@7bc1f673]]] does not run within a ServletContext. Make sure the object is fully configured!
	at org.springframework.web.context.support.WebApplicationObjectSupport.getServletContext(WebApplicationObjectSupport.java:138) ~[spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.initContentNegotiationStrategy(ResourceHttpRequestHandler.java:416) ~[spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.afterPropertiesSet(ResourceHttpRequestHandler.java:334) ~[spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1758) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1695) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	... 93 common frames omitted

linux运行

在linux上面运行是不是控制台要一直开着,这样好不方便啊

pom.xml增加工程自定义路径和jdk版本

工程中的源码、配置、web页面,均为非标砖的maven目录结构。通过在pom.xml中设置相关路径属性,使IDE可根据pom识别相关路径,避免IDE中单独进行设置。

无法以图形界面模式启动kiftd

刚下载的源码,然后下载包,配置maven,运行。使用得编译器是idea
打印出:错误!无法以图形界面模式启动kiftd,您的操作系统可能不支持图形界面。您可以尝试使用命令模式参数“-console”来启动并开始使用kiftd。
错误类型:java.lang.IllegalArgumentException: input == null!(自己打印的)
请问是什么地方的问题,还有怎么以命令模式运行。
尝试运行,报错如下:
C:\Users\12275\Desktop\kiftd-source-master>java -jar kiftd-1.0.25-RELEAS.jar -start
Error: Unable to access jarfile kiftd-1.0.25-RELEAS.jar
谢谢!

文件或文件夹数量增多带来的页面响应缓慢问题

不得不说,这个问题还是比较严重的,基本上数量稍微破千,就有明显的页面响应缓慢了。建议:

  • FolderViewServiceImpl.java的实现,可以考虑基于数据库进行操作,即refresh的时候,把所有文件及文件夹的id、层数、全部路径等都写入数据库,然后之后的操作都从数据库进行索引。

  • FolderViewServiceImpl.java中可以考虑用多线程实现并行处理,经过测试,发现FolderMapper接口的countByParentID方法,与FolderUtil接口的getParentList非常耗时。查询当前文件夹的父级文件夹和子文件夹,就可以并行操作。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.