网盘进化史就这样(下)——功能实现

发布时间:2025-09-12 点击:9
云计算
上回说到网盘的思路简单设计以及和升级迭代的过程
详细内容请回顾https://blog.51cto.com/yerikyu/2361380
本文主要是介绍,如何通过jhipster快速搭建网络云盘服务。
我们使用jhipster构建一个web服务是一件简单便捷的事情,启动起来也很舒服的,如下图所示,通过命令jhipster就可以启动该框架为我们提供创建项目的功能
之后是进行项目名称的设置,还有包名,认证方式等配置设置。不懂的话,建议一直回车选择默认配置,之后在数据库选型这一栏,由于项目需要,这里我们选择mongodb。
之后我们还需要选择启动仓库,笔者习惯使用gradle
其他的按照默认配置就行啦,之后还是一样的 ,一路回车暴击,等待项目创建完成,你们会观察到创建项目中,不断的新建文件以及相关依赖的进度条,等待创建完成。
这样就形成了我们的构建的web服务了,服务可以启动了,然而毕竟是通过框架搭建起来的web服务还是比较简单的,我们需要再进行个性化开发。在图中我们可以看到一个清晰的后端服务框架
因为我们在创建项目的过程中,已经明确说明需要用到mangodb,因此,框架已经为我们提供了mangodb数据库的docker-compose文件,我们可以直接使用的,不过此时docker container的数据是不会保存的,如果我们重启docker服务,将会导致数据丢失,因此我们需要为该容器挂载一个持久化卷,修改下docker-compose文件即可,设置镜像自动重启
version: \\\'2\\\'services: utils-mongodb: image: mongo:4.0.2 ports: - 27017:27017 volumes: - ~/volumes/jhipster/utils/mongodb/:/data/db/ restart: always准备工作完成之后,我们接下来是开始网盘功能的简单开发了,在jhipster中,对象之间的关系可以通过jdljhipster domain language来表达,其表达方式比较简单,这个就是一个简单的网盘逻辑关系设计
entity uploadfile { uploadtime string}entity downloadfile { name string downloadtime string count instant}relationship onetoone { uploadfile{name} to downloadfile}// set pagination optionspaginate * with infinite-scrollpaginate * with paginationdto * with mapstruct// set service options to all except fewservice all with serviceimpl// set an angular suffixangularsuffix * with smallestpan设计完成之后使用命令jhipster import-jdl ./jdl/p1.jdl 对该文件进行编译,执行,至于具体原理本文不作深入分析,下次有机会再说:)
执行之后是需要生成数据库mapper层来完成对数据的自动写入读出功能
./gradew build
生成结果如下
接下来是对service进行开发,基于前面jdl自动生成的dto、impl等文件,我们需要的就是对接口进行调通,不妨开发一个接口类,实现上传和下载,网盘不就是这样嘛,一个远端的存储设备,提供上传和下载功能嘛
@servicepublic class fileserviceimpl implements fileservice { @override public object upload(object object) { return null; } @override public object download(object object) { return null; }}这里我们主要使用spring-cloud框架中的grid这个组件,实现orm的功能,完成对mongodb数据库的写入写出,提高我们的开发效率,不过这样做从一定程度上降低代码的运行效率,这个优化思路并不是本文介绍内容
@servicepublic class gridfsservice { @autowired private mongodbfactory mongodbfactory; / * 插入文件 * @param file * @return */ public gridfsinputfile save(multipartfile file){ gridfs gridfs = new gridfs(mongodbfactory.getlegacydb()); try{ inputstream in = file.getinputstream(); string name = file.getoriginalfilename(); gridfsinputfile gridfsinputfile = gridfs.createfile(in); gridfsinputfile.setfilename(name); gridfsinputfile.setcontenttype(file.getcontenttype()); gridfsinputfile.save(); return gridfsinputfile; } catch (exception e){} return null; } / * 据id返回文件 */ public gridfsdbfile getbyid(objectid id){ dbobject query = new basicdbobject(_id, id); gridfs gridfs = new gridfs(mongodbfactory.getlegacydb()); gridfsdbfile gridfsdbfile = gridfs.findone(query); return gridfsdbfile; } / * 删除 * @param id */ public void remove(string id) { gridfs gridfs = new gridfs(mongodbfactory.getlegacydb()); gridfs.remove(new objectid(id)); } public void setmongodbfactory(mongodbfactory mongodbfactory) { this.mongodbfactory = mongodbfactory; }}好了,开发至此,代码就已然开发完毕了,可以正式启用这个超简洁的小小盘,至于说接口格式,网络请求路径等这些,jhipster都已经为你自动生成好了,就在web.rest里面,各位看官不妨阅读下源码,倒是简洁易懂呢,由于这个只是后台页面,所以可以通过postman这样的调试工具对这个功能进行测试即可,后面有机会在来介绍该页面的前端开发
使用jhipster这样的框架辅助我们开发给我们减少了很多工作量,妥妥提升我们开发的幸福感:)
代码仅供参考,不妨来个star:https://github.com/yerikshu/smallestpan
谢啦~~
文章参考:
jhipster官方网站:https://www.jhipster.tech
grid介绍:https://www.baeldung.com/spring-data-mongodb-gridfs

新浪云服务器怎么暂时关闭广告弹出
云和物理服务器有什么区别
两个域名如何备案-备案平台
微信如何关联小程序
文件传输问题-虚拟主机/数据库问题
如果域名从西部数码的一个帐户转到另一个帐户
咨询接入商-备案平台
无法打开请给查看谢谢-虚拟主机/数据库问题