结合个人项目浅谈云盘存储

前一段时间刚完成一个个人的web项目,是用JSP技术开发的文件系统,其中实现了的功能有:注册、登录、上传文件、下载文件、查看文件,功能比较简单。这个项目的灵感来自最近用得比较多的云盘,云盘的主要功能除了以上几个外,还有回收站、分享自己的文件、将别的用户分享的文件转存到自己的云盘中,除此之外,有些云盘还具有关注他人、甚至是手机找回的附加功能。

现在先说说我做了这个项目之后的一些心得,既然这是一个有关于文件的系统,那么首先需要注意的点就是文件的路径。在写这个项目的时候我简化了文件的路径,没有用相对路径,直接写死了路径,我将路径都设在D盘的一个文件夹a(举个例子,文件夹命名可以根据项目来命名)中。只要用户注册了账号,就给他在D盘的目录中新建一个文件夹,以用户名来命名文件夹名,之后用户对文件的操作都会存到那个文件夹中。例如我注册了一个账号,用户名叫admin,那么系统会在注册成功后在D:\a目录下创建一个admin文件夹,之后该用户上传的文件都会存入这个admin文件夹中。开发这个系统的时候,我是在自己的计算机上进行编写和配置的,服务器和客户端是同一台计算机,一开始我以为注册后是在客户端的计算机上创建文件夹,这样似乎就失去了云端存储文件的意义,之后当我将项目传到另一台服务器上运行后,发现注册之后客户端是不会新建用户文件夹的,用户对文件的操作都是在服务器端的文件夹中有所体现,这样可以简单实现云端存储。

关于这个文件系统,还有一点是文件的读取与写入,现在这个项目还停留在上传文件不能上传包和文件夹,而所传的文件也有一些限制,比如说如果上传word的话,在线查看只能看到乱码,上传图片,若要在线查看,则需要在HTML标记中使用这些能显示图片的标签。而这方面这个项目还没有对用户上传的文件进行判断、分别处理。

其中这个项目中自我感觉比较好的一部分是选择文件这一块,用户点击“下载文件”、“查看文件”或者“删除文件”后会链接到一个“选择文件”的界面,这个界面用form表单单选的形式让用户选择一个文件,用户提交后会转到一个判断用户操作的servlet中,判断用户到底是要下载还是查看或是删除,然后再跳转到相应的servlet中进行操作,最终操作完成的信息会显示在一个result.jsp的页面中。整个项目使用了mvc模式,servlet做验证,bean存储信息还有连接数据库,JSP页面用来显示,整个层次很清晰,后期修改维护起来也很方便。

现在我来说说对现有的一些云盘网盘的个人想法,最近这一两年网盘兴起,用得也很频繁,本人是目睹了腾讯微云的一步一步变化,也申请了好几个不同网盘的账号,甚至使用网盘都取代了U盘,基于此我有许多个人想法。首先,现在很多云盘都有手机客户端,可以实现备份手机相册、通讯录之类的功能,还有一个可能大部分人不会去注意的功能,就是手机客户端可以每天签到送网盘空间,不过这个功能现在百度云还不支持。现在是信息时代,网盘空间都是以T来计,联系到我做的这个项目,可见网盘服务器的容量十分惊人。之前我有在360云盘上转存过别人分享的文件,于是就联想到这些分享的文件可能被存放在一个特定的文件夹中,然后不同的用户都可以对其进行访问,这样就可以不用为重复的文件浪费空间了,但是当你删除自己网盘中的这个文件时,不会对那个文件夹中的文件进行删除,只是删除了与那个文件夹相关的一个链接。这么想来如果你云盘上的东西都是从别人那里转存过来的,虽然显示你的云盘空间减少了,其实这部分空间只是那些文件大小的一个映射,并没有真正占用你的云盘空间。往更深的方面想,这些你所拥有的虚拟的云盘空间都是与他人共享的一个空间,它所显示的空间是指将要分配给你的文件的一个大小的映射,说的有点绕,说白点就是那些空间是虚的,并不是真正给你那么多T,让你一个人来存储文件。真正让我感觉到那些空间是被我所使用,大概就是在我将自己的文件上传到网盘中的时候。说到这里我又想到,那些还没有被装满的空间,其实也是没有真正属于你的,这就像你存在余额宝中的钱,名义上是属于你的,但其实那些钱已经在各种地方流通了不知道多少遍。

当你将自己的文件存到网盘中的时候考虑的除了空间之外,还有一点就是安全了。联系到自己做的这个文件系统,拥有最高权限的人,也可以说是管理员,他可以直接打开服务器端的文件夹查看用户上传的文件。那么那些云盘应该也是类似的,不过一些网盘声称自己的服务器存储文件时是加密存储,管理员也不能对那些文件随意查看操作。说到安全问题,我想到文件在上传下载的时候是否保持了文件的原始性。再次联系到自己做的文件系统,上传文件时,是先读取用户上传的文件,再将读取到的内容一行一行地写入到服务器中新建的一个文件内。用户下载文件时用的也是输入输出流。在上传下载文本文件时用这个方法所得的文件尚且会有点出入,那么那些云盘是使用什么方法,保证传输的不同类型的文件都保有原始性的呢?他们又是使用什么方法来实现高质量地上传和下载的呢?

有关这一方面我还需要更多更深入地去学习去思考去探索。

你可能感兴趣的:(学习)