这是为The Pinata Challenge提交的投稿。
我创建的Pinata 文件系统和 PinDrop 功能作为 Pinata 存储系统之上的一个层,允许用户使用文件夹和子文件夹来整理和可视化展示他们的文件。
它提供了一个接口,同时扩展了 Pinata 的特性。用户可以将文件关联到文件夹,并且可以执行许多通用功能,比如创建、删除和下载文件和文件夹。
灵感来源
我在第一天的“黑客松”上决定要制作一个快速私密的文件分享工具,因为这是我需要的东西。但因为事情太多,这个想法只好放弃了。
快进到截止日期前一天,我想到了群组功能,可以利用它。我可以利用关系型数据库通过自我参照创建层级结构,使其成为一个功能完备的平台来存储和整理文件。
经过连续24小时的不眠开发,我成功推出了Pinata文件系统的第一个版本。
静音文件夹
有一个我构思的功能叫做PinDrop(灵感来自AirDrop),它作为一个默认文件夹,在用户注册时,系统会默认创建该文件夹。
这个文件夹非常特殊,因为它没有子文件夹,用户可以将文件直接推入堆叠。以后再取用即可。该功能旨在实现用户在不同设备间的即时文件共享。未来它可能还会有自己的专用服务和路由。
你可以在这里找到这个项目: 这是 GitHub 上的一个链接:https://github.com/mr-loop-1/pindrop
概览
为了未来
数据库最好的地方在于它不存储任何实际文件的信息。它只是对群组的层级表示。
目前看来可能有些冗余,这主要是因为注册时应用程序会要求jwt和网关认证,但我通过Discord得知正在开发新的身份验证提供者,一旦集成,应用程序将完全脱离与实际用户数据的关联。
技术堆栈(例如:前端技术、后端技术等)
后端:expressjs, knexjs, mysql,运行在 Railway 上
前端技术栈:vite react, tailwind,托管在 Vercel 上
简单概述
-
首先是登录/注册页面。注册时,需要输入有效的pinata jwt和网关url。但这些信息不会在客户端显示,仅供服务器使用。
- 这是挂载在"~/ "的根目录。其他所有文件夹都应从这里衍生。在Pinata里,用户首次注册时会创建这个根目录。
支持的文件类型可以通过点击任何文件夹里的“添加文件”按钮来添加。添加后,文件会出现在 pinata 中对应文件夹的组里。
这是一张示例图片。
除了在根目录的 pinDrop 文件夹(pinDrop 文件夹)之外,还可以在任何地方新建文件夹。
这是一张图片,点击可以查看。
点击文件夹即可进入该文件夹,我们还提供了一个返回按钮来返回上一级文件夹。若要回到根目录,请从 URL 中删除 id 参数。
这是一张图片:
-
文件和文件夹可以使用右侧的按钮进行删除。pinDrop 文件夹不能被删除,因为它位于根目录。
- 文件可以通过下载按钮在新标签页打开。这通过一个1分钟内失效的签名链接实现。
https://github.com/mr-loop-1/pindrop
提供了本地运行的说明。请在评论或GitHub问题中提出任何错误或问题。
更多详情。请确认
- 文件夹名称不能包含空格
- 即使在不同的文件夹中上传相同的文件或文件名也不行,因为Pinata会将它们合并存储在一起
- 下载多个文件和整个文件夹
- 目前删除文件夹时,子文件夹中的文件会处于悬空状态。(我尚未在Knex和Pinata的SDK中实现递归删除的查询。)
- 进行了一些bug修复和字段验证工作
- 当前要求用户手动提供其Pinata账户的jwt和网关信息。我计划将未来的Pinata OAuth提供者集成到应用程序中。
共同學習,寫下你的評論
評論加載中...
作者其他優質文章