本帖最后由 Edric.Li 于 2023-3-10 08:54 编辑
在日常工作中,文件上传是一个很常见的功能。在项目开发过程中,我们通常都会使用官方提供的附件上传,图片上传以及FilePreview来实现对应的功能。
可能有人会有疑问,现在有这么多的插件都能上传文件,你这个插件还有什么意义呢。
至于为什么要做这个插件,其实没有为什么,就是想做。。。。。
第一版插件理想状态下会支持以下功能
- 单文件上传
- 多文件上传
- 大文件分块上传
- 增加目录存储
- 与官方的云存储对接
大文件上传
大文件上传其实包含了分块上传和断点续传/秒传
适用场景:
文件过大,重复文件过多,以及想提升速度的
分块上传:
在浏览器端将文件拆分成若干片段,一部分一部分将文件上传至服务器,最终上传完成以后,会在服务器上将文件合并
好处:
普通上传,只会发送一个请求,将文件以流式的方式传输至文件,有了分块上传后,就会同时发送好几个请求将文件上传至服务器。
速度上,理论来说,是比普通上传要快的
劣势:
如果你服务器比较拉跨,或者带宽有限,那这个功能还是算了吧,
因为开了分块上传以后,会频繁的向服务器发送请求,并且还要将某一片段的文件存储,势必会增加服务器的IO压力。
断点续传/秒传
简单来说就是如果上传崩了,下次在上传的时候会接着上次的进度传。比如我要上传一个10G文件,大概需要10分钟左右,那么我上传到6分钟的时候崩了,不管是网络崩了还是哪崩了,总之 想象一下,它就是崩了。
下次上传还要等10分钟,那就是总共得16分钟,而且这还要保证第二次要一定能传上去。
开了断点续传以后,第一次的时候在6分钟的时候崩了,那么第二次只需要上传剩下4分钟的文件就可以了。如果在剩下的4分钟中又崩了,那就继续在失败的地方接着上传。不会从头在上传。
秒传其实就是如果上传一个文件,发现服务器上已经有相同附件了,那么就不在上传这个文件,直接把进度拉满。这样的好处就是服务器上不会存在一摸一样的文件
好处:
可以接着上次未上传的进度接着上传,且是不区分客户端的,比如在A机器上传了50%,忽然机器摆烂了,那换到B机器上传的时候,也会从剩下的50%上传。
服务器不会存在相同文件,减少存储空间的浪费。
劣势:
在一段时间内,服务器上可能会存在一些垃圾文件,至于一段时间具体是多久还没想好,可能24小时,也可能48小时,具体得看到时候在代码里写多少了。
浏览器准备工作时间会变长,因为要用断点续传,第一,就是要能识别是同一个文件,现在普遍的做法就是计算整个文件的MD5值,这个过程会在浏览器端进行,具体计算时间长短,取决于硬件性能。不过我会使用浏览器的多线程机制来提升计算速度。
对接官方的云存储
有人在这可能会问,官方都支持了云存储功能,你这个插件还有什么用呢,其实如果研究过官方的云存储实现原理就能知道,上传文件的时候,并不是直接将云存储上传至云存储的,而是先将你的文件上传到服务器,服务器后台会将文件上传至云存储。
那到这,可能有的人已经明白了,不管你是否使用云存储功能,你都会将服务器上传至服务器,只要你把文件需要上传服务器,就会遇到上传速度,上传到一半失败的问题。
如果有可能的话,这个插件将对接官方的云存储,这样的话,你的文件最终是存在云上的,稳定还安全,也可以享受上传速度提升,断点续传和秒传的功能,岂不美滋滋。不过呢。。。。至于能不能实现,就看能不能对接上了,毕竟只是一个小小的插件,想和官方的功能对接,在没有API的情况下还是有一点点难度的。
最后
至于什么时候能做完,尽量让各位格友在9.0正式发布的时候上吧,不过也不一定。毕竟白天还要搬砖,而且天气热了,砖格外的烫手,只有下班了才能有时间搞搞。
大家有什么需求,尽管提,至于能不能做,以及要不要做,就再说吧。。。。
|