Giter Club home page Giter Club logo

lpan's Introduction

🎉LPan

pass pass

🎁特点

  • 一个轻量级网盘
  • 限速
  • 断点续传
  • 文件秒传
  • 轻松权限管理 一键生成加密二维码
  • 回收站系统,自动清理过期链接、删除文件
  • Dockerfile进行docker部署
  • Docker-compose模式部署

🚀架构与功能实现

设计思路是每个哈希值不同的文件挂载在服务器,数据库存储所有文件的信息和用户与文件ID的映射

使用虚拟目录以减少系统开销

image-20220731124010610

🎨一些接口与实现

  • 上传文件
fileGroup.POST("/upload", uploadfile)

上传文件 会从body的form-data中读取文件与父级虚拟目录

然后检查文件哈希值 与数据库中已有哈希对比 如果存在相同 直接秒传(直接在私人存储表添加一条记录 指向公共存储表中指定文件)

  • 断点续传
fileGroup.POST("/uploadbysilce", uploadfilebysile)

基本流程如上 但是将from-data的文件copy到服务器本地路径时,会先生成一个临时文件,记录传输进度,下一次再上传时根据临时文件信息 使用seek即可实现断点续传

  • 下载文件
fileGroup.GET("/download/:file_id", downloadfile)

先检查url确定该文件是否为分享,然后确认点击者权限,如果有权限可进行下载

如果点击者非VIP 速度会被限制到500KB

  • 边下边播
fileGroup.GET("/downloadbysilce/:file_id", downloadbyslice)

基本流程与下载一致 但传输时会把链接升级为Websocket 然后分片传输

  • 删除文件
fileGroup.DELETE("/delete/:file_id", deletefile)

删除文件是只针对数据库的操作,将用户私人表中的delete字段设置为删除日期即可,三十天内可找回,三十天后字段自动删除

  • 恢复文件
fileGroup.GET("/recover/:file_id", recoverfile)

恢复文件同样是针对数据库的操作,将delete字段设置为空即可恢复(被删除的文件无法下载分享等))

  • 文件改名
fileGroup.POST("/rename/:file_id", renamefile)

文件改名只改变用户私有库中文件名

  • 文件路径修改
fileGroup.POST("/modify-path/:file_id", modifypath)

文件路径修改会修改用户私有库中father_path字段,只改变虚拟路径,数据返回前段时即可根据父路径 显示某个路径下所有文件与文件夹

  • 文件分享
fileGroup.POST("/share/:file_id", sharefile)

文件分享会生成一个二维码,它携带参数share=true&expr_time分享字段和过期时间(天),在期限前点击链接即可一键入库,然后下载

  • 加密分享
fileGroup.POST("/share/secret/:file_id", sharefilewithsecret)

会生成一个加密链接二维码

  • 解密重定向链接
r.GET("/secret/:val", JWTAuthMiddleware(), RateLimitMiddleware(time.Millisecond*100, 2048), func(c *gin.Context) 

加密的链接会有一个前缀,所有加密的链接都由这个接口处理,接口拿到密文后解密重定向

  • 定时清理

通过cron定时任务,每日清理回收站过期与删除到期的记录

📄Referrence

lpan's People

Contributors

lluckyboi avatar

Stargazers

 avatar Tea avatar  avatar

Watchers

 avatar

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.