首页 理论教育 云计算应用开发实践:文件管理模块实现

云计算应用开发实践:文件管理模块实现

时间:2023-11-20 理论教育 版权反馈
【摘要】:针对这个问题,必须提供一个统一的文件管理接口FileManager,在本书中将针对AWS S3文件系统与HDFS文件系统分别实现AWSS3FileManager与HDFSFileManager,并使用工厂模式根据所需使用的文件系统类型选择具体的实现,如图5-9所示。对于本系统,目前只关心文件名与大小。先将文件管理模块与HDFS集成,HDFS文件系统初始化的代码如代码清单5-20所示。调用服务器上传文件的JSP代码如代码清单5-25所示。使用数据流下载文件有一个小技巧,即设置Http返回消息头,其代码如下。

云计算应用开发实践:文件管理模块实现

云计算环境中提供了多种文件管理系统,包括HDFS和AWSS3等。这些文件系统都有各自的特点,并且它们提供的编程接口也有很大的区别。

对文件的操作一般有创建、删除、复制、下载等。

为了便于日后迁移系统,我们需要设计一个公共文件系统访问框架

针对这个问题,必须提供一个统一的文件管理接口FileManager,在本书中将针对AWS S3文件系统与HDFS文件系统分别实现AWSS3FileManager与HDFSFileManager,并使用工厂模式根据所需使用的文件系统类型选择具体的实现,如图5-9所示。

978-7-111-36687-4-Chapter05-36.jpg

图5-9 公共文件系统访问框架

(1)FileManager接口代码

FileManager接口代码如代码清单5-17所示。

【代码清单5-17】

978-7-111-36687-4-Chapter05-37.jpg

(2)统一文件对象

由于各个文件系统返回的文件对象不一致,所以需要根据用户自己的要求建立统一的文件类。对于本系统,目前只关心文件名与大小。统一文件类的代码如代码清单5-18所示。

【代码清单5-18】

978-7-111-36687-4-Chapter05-38.jpg

(3)根据文件系统类型,选择具体的文件系统实现

注意在该代码中,我们同样使用了单态模式,但并不是在JVM加载类的时候进行实例化,而是在getInstance时初始化。原因很简单,在具体的云计算环境中,一般只存在一种文件系统,HDFS与AWSS3很难共存。在这样的情况下,就没有必要每一种文件系统都实例化,而是要根据具体情况来初始化文件系统。

同时要在getInstance方法后加synchronized关键字。因为可能有好几个Servlet线程同时调用getInstance方法。如果不对getInstance方法加锁,则有可能实例化出多个FileMan- ager对象。如代码清单5-19所示。

【代码清单5-19】

978-7-111-36687-4-Chapter05-39.jpg

先将文件管理模块与HDFS集成,HDFS文件系统初始化的代码如代码清单5-20所示。

【代码清单5-20】

978-7-111-36687-4-Chapter05-40.jpg

978-7-111-36687-4-Chapter05-41.jpg

(4)上传文件

该共享系统要求每个用户只能访问属于自己的文件。因此在HDFS根目录下建立一个filesharesystem文件夹,每个新用户都将在该文件夹下建立以自身用户名命名的专属文件夹。

使用如下命令建立filesharesystem文件夹。

978-7-111-36687-4-Chapter05-42.jpg

为用户创建专有文件夹,如代码清单5-21所示。

【代码清单5-21】(www.xing528.com)

978-7-111-36687-4-Chapter05-43.jpg

检查用户文件夹是否已存在,如代码清单5-22所示。

【代码清单5-22】

978-7-111-36687-4-Chapter05-44.jpg

通过Tomcat上传文件有两种方式,一种方式是将文件先上传到Tomcat所在的服务器。另一种方式是通过数据流,直接将文件上传到最终的文件系统中。这里选择后者,如代码清单5-23所示。

【代码清单5-23】

978-7-111-36687-4-Chapter05-45.jpg

将文件上传到服务器的代码如代码清单5-24所示。

【代码清单5-24】

978-7-111-36687-4-Chapter05-46.jpg

调用服务器上传文件的JSP代码如代码清单5-25所示。

【代码清单5-25】

978-7-111-36687-4-Chapter05-47.jpg

978-7-111-36687-4-Chapter05-48.jpg

(5)下载文件

通过Tomcat下载文件也有两种方式,一种方式是将文件先下载到Tomcat所在的服务器。另一种方式是通过数据流直接获取文件,再通过数据流传递给客户端。这里选择后者,如代码清单5-26所示。

【代码清单5-26】

978-7-111-36687-4-Chapter05-49.jpg

使用数据流下载文件有一个小技巧,即设置Http返回消息头,其代码如下。

978-7-111-36687-4-Chapter05-50.jpg

这就告诉客户端,这是一个下载文件。服务器的实现如代码清单5-27所示。

【代码清单5-27】

978-7-111-36687-4-Chapter05-51.jpg

978-7-111-36687-4-Chapter05-52.jpg

JSP页面只需加入如下链接,即可让用户单击下载文件,如代码清单5-28所示。

【代码清单5-28】

978-7-111-36687-4-Chapter05-53.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈