课程管理:
教师可以创建、删除、修改课程,学生可以加入、退出课程,查询所有的课程,教务主任可以查看所有的课程;
文件管理:
教师可以在课程对应的文件管理界面上进行文件的所有操作,学生可以在课程对应的文件管理界面进行上传、下载操作,教务主任可以在所有课程对应的文件管理界面上查看文件。
一些缺点
- 文件管理执行文件的操作后,UI上没有实时反映更新的结果
- 没有文件在线预览功能
- 批改功能不知道怎么实现才算好?
- …
要点介绍
通过spring boot操作hdfs中的文件
虚拟机搭建hadoop单机伪分布式环境,环境为vmware,centOS6.5。注意虚拟机名字为hadoop,要能上网,并且ip为静态IP;
主机下载好hadoop和jdk,通过FileZilla这个软件上传到虚拟机里。jdk最好是rpm格式,从官网下。hadoop版本为hadoop-2.6.0-cdh5.7.0.tar.gz;
安装过程参考网上资料,先装jdk,然后再装ssh,最后装hadoop,然后启动hadoop;
在spring boot中操作hadoop。pom.xml中的代码为:
|
|
然后就可以新建一个类来连接hadoop了,值得注意的是,对hdfs的操作都要通过FileSystem对象,网上很多都是写在测试类里的@Before方法里,这样可以在执行其他方法时先初始化了然后再调用FileSystem对象,但java类中我不知道怎么全局初始化一个对象,所以我写了个init()方法:
|
|
这样在其他方法要用到时就先调用init(),避免报fileSystem为null的错误。注意username为hadoop,也是虚拟机的名字,这里不写这个参数也会报错,因为每次操作都要指定特定的用户;
- 对应的文件操作其实都挺简单的,直接调用对应的方法即可,这里重点讲下如何递归地查询文件以及下面的子文件夹:12345678910111213141516171819202122232425262728293031public File queryDirs(String dir) throws IOException {init();File file = new File();file.setPath(dir);大专栏 作业在线提交和批改系统 file.setId(0);file.setPid(-1);file.setTitle("全部文件");FileStatus[] fileStatuses = fileSystem.listStatus(new Path(dir));int pid = 0;queryDir(fileStatuses,file, pid);return file;}private void queryDir(FileStatus[] fileStatuses, File file,int pid) throws IOException {if (fileStatuses.length > 0){List<File> list = new ArrayList<File>();for (FileStatus fs : fileStatuses) {File f = getFile(fs);f.setId(id++);f.setPid(pid);list.add(f);if (fs.isDirectory()){FileStatus[] childFs = fileSystem.listStatus(fs.getPath());queryDir(childFs, f, id - 1);}}file.setChild(list);}}
这里涉及到一个自定义的File类:
|
|
以及一个对应的getFile()方法:
|
|
权限管理
这里我直接在github上找了一个现成的:idea spring boot的后台基础权限管理系统
第一次使用别人的代码,才发现真的挺坑的,不过这个虽然star人数不多,有些bug,但总体来说代码逻辑结构清晰,功能全面,修改起来还算可以。
文件管理UI
这个也是从github上找的,模拟百度云界面:百度云界面功能实现
全是用html+css+jquery写的,几十个jquery函数改起来很要命…..,但没办法,界面确实是我想要的。
总结
上面就是这个项目有必要说明的地方,不建议下载我的代码,因为实在是很渣,通过这次意识到自己很多的不足,希望以后在github能有更多自己写的优质的项目。(ง •̀_•́)ง