文件服务器规划设计文档.docx
- 文档编号:29944606
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:21
- 大小:45.70KB
文件服务器规划设计文档.docx
《文件服务器规划设计文档.docx》由会员分享,可在线阅读,更多相关《文件服务器规划设计文档.docx(21页珍藏版)》请在冰豆网上搜索。
文件服务器规划设计文档
密级:
公开
文件上传服务器
FUS〔fileuploadservice〕
概要设计
项目编号
文档版本号
2011-12-19
归属部门
归属项目
编写人
编写日期
中航国际金网公司
技术部
版本历史
日期
版本
简要描述信息
作者
2011-12-19
0.1
创建该文档
高正
2012-1-09
0.2
修改部分内容
高正
2012-01-11
0.3
结构进行了调整
高正
2012-1-16
0.5
评审后初步定稿
高正
分发清单
文档接收者
组织部门
1前言
1.1编写目的
编写该文件的目的是描述文件服务器的框架概要设计,有如下好处:
●确定系统开发功能的范围.
●供设计人员分析时使用.
●运维人员在进行部署时的参考.
●作为软件开发人员进行设计和编码的基础.
●确定系统测试与验收内容.
●软件维护的参考资料.
●作为项目验收标准之一.
1.2适用范围
业务或需求分析人员、架构设计师、软件开发工程师、测试人员、项目管理人员.
2项目概述
2.1背景
对于Web服务器来说,不管是Apache、IIS还是其他容器,图片是最消耗资源的,于是我们有必要将图片与页面进行分离,这是基本上大型都会采用的策略,他们都有独立的图片服务器,甚至很多台图片服务器.这样的架构可以降低提供页面访问请求的服务器系统压力,并且可以保证系统不会因为图片问题而崩溃,在应用服务器和图片服务器上,可以进行不同的配置优化,比如apache在配置ContentType的时候可以尽量少支持,尽可能少的LoadModule,保证更高的系统消耗和执行效率.
同时,对于某些应用需要针对某图片进行截取不同尺寸的图片,以节省网络带宽.例如产品图片,往往要提供多个缩略图,例如在列表页为小图,在产品详情页为中图,当鼠标放到中图上再显示大图等.为此上传服务器需要提供图片的适当裁剪成各种尺寸的图片,以适应多种情况.
其实,不只是图片耗网络带宽,一切需要下载的文件同样存在着网络带宽的耗用文件.
基于以上原因,金网公司开发了文件上传服务器,作为所有新建项目上传图片、文件的统一存放地.为以后的集群、负载均衡等分布式架构提供一定的基础.
2.2目标
开发文件上传服务器应用程序,对外提供文件上传服务.通过各种参数的设定来完成图片裁剪、图片转换、是否多文件存储等功能,并将文件路径反馈给任务发起方.目前暂不提供图片生成水印功能.
同时开辟后台,可以创建应用、查看图片日志,如所有已上传文件的来源地、日期等信息.
3概要设计
3.1工作模式
FUS文件服务器可对N台Web应用服务器提供文件上传服务,Web应用服务器中部署了"文件上传组件〞.
FUS文件服务器分为两个部分:
FUSService服务器〔简称FUSServer〕和文件存储服务器〔简称StorageServer〕.FUSServer负责为其他Web应用提供上传文件和记录功能,所上传的文件被真实地存储在了StorageServer上.StorageServer既作为物理存储服务器,同时为各个Web应用提供所存储文件的外链功能.即:
在Web应用上可通过的方式<23102312321.jsp>访问所存储的文件.
Web应用服务器与文件服务器的交互过程基本上由4步来完成:
第一步:
设定FUSConfig各种参数,确定上传模式
Web应用服务器中,文件上传组件[即fus文件夹]需要被放入到根目录下.同时,需要上传文件的页面中,进行配置,构造各种参数.具体参见3.4web应用端配置部分.
第二步:
用户点击上传按钮
由于第一步所设置的参数的不同,本步骤的展现形式也不同,主要分为以下两种情况:
情况一:
弹出文件选择窗口
情况二:
弹出多选文件选择窗口
第三步:
上传文件
该步骤为根据文件上传组件自动构造参数,将文件上传到FUSServer中.FUSServer接收到传来的文件信息和各种参数后,将文件转存到指定的StorageServer中,并将日志记录到数据库.
第四步:
将文件上传后的路径返回到客户端
文件上传组件会把文件真实路径反馈到客户端.
[第五步:
当需要人工裁剪时候才会遇到]
进入人工裁剪方式,人工裁剪完毕后继续走第三步和第四步.
典型应用场景如下图所示:
3.2文件上传组件的设计
文件上传组件为一组js脚本和css样式以与图片、html等的组合.该组件可被放入任何web应用系统中,作为文件上传的支持控件,它不受限于任何其他开发语言〔如.net、java、php等〕,但必须基于jQuery1.6以上.其目录结构示例如下图所示
该组件的核心部分fus.js;其已整合了开源的基于jQuery的uploadify插件.fus.js所完成的功能:
●FUSConfig类的定义,具体属性见下表3-1.
●根据fusConfig来确定点击文件上传按钮后的处理情况.
●构造与服务端需要的参数,并将文件提交到服务器.
●动态显示文件上传进度.
●如果需要人工裁剪,提供人工裁剪功能.
●调用文件上传后的回调函数将文件真实路径反馈给客户端.
●真对FCK有单独的处理过程.
表3-1FUSConfig配置类的属性设定:
参数名
必须
取值范围
说明
1
serviceUrl
是
字符串
表示fus服务器文件上传请求url.例如:
fus.eavic/upload.action
2
appId
是
数值
表示是哪个应用在调用文件服务器的上传.
该值是通过本文档4.1创建应用后所得的值.
3
divId
是
字符串
页面中的div元素id,该元素用来显示已上传的文件信息.
4
callback
是
字符串
表示回调函数名,即当文件上传完毕后,自动回调的函数名字.
5
auto
否
ture/false
true表示选择完文件后是否立即上传.false表示最后统一点击上传后才上传文件.
6
buttonImg
否
字符串
文件上传按钮的图片路径,若无,则为默认图片.
7
buttonText
否
字符串
文件上传按钮的文字,若无,则为默认文字——上传文件.
8
cancelImg
否
字符串
取消按钮上的背景图片路径.若无,则为默认图片.
9
displayData
否
字符串
文件上传过程中的文字提示.
10
sizeLimit
否
数值
所上传的每个文件的最大byte数.
11
removepleted
否
ture/false
上传完毕后,显示已上传文件的div是否自动隐藏.
12
multi
否
ture/false
表示是否是一次上传多个文件;若无该参数默认为false.
queueSizeLimit
否
数值
表示多文件上传时,允许本次上传的最多的文件数.
14
fileExt
否
字符串
允许上传的文件扩展名,多个扩展名之间用英文分号分割.例如:
'*.jpg;*.gif;*.png'
若无该参数,表示文件类型无限制.
fileDesc
否
字符串
允许上传的文件扩展名在弹出窗口中的显示提示.例如:
'图片文件<.JPG,.GIF,.PNG>'
15
manuCrop
否
ture/false
该参数只有在mult=false情况下才使用.表示单个图片是否需要人工裁剪,若无该参数默认为false.
16
picZoom
否
ture/false
表示图片是否需要缩放处理〔按照指定的width和height来设置缩放后的图片大小〕,若无该参数默认为false.若有该参数,则同时必须有width和height参数〔可只有1个,若只有一个,则另一个为等比例缩放〕.
17
maxWidth
否
数值
默认1280
该参数只有在manucrop=true情况下才使用.表示图片所裁剪的宽度像素数.
18
maxHeight
否
数值
默认960
该参数只有在manucrop=true情况下才使用.表示图片所裁剪的高度像素数.
19
thumSize
否
字符串
值:
小图宽*小图高;中图宽*中图高
该参数只有在img=true情况下才使用.表示为该图片提供缩略图,系统会生成小图、中图,他们的名字分别为原图最终文件名添加尾缀字母方式.若无该参数,表示无需生成小图和中图缩略图.
例如:
原图的上传后最终文件名为201112190001.jpg
小图文件名为201112190001_s.jpg
中图文件名为201112190001_m.jpg
20
imgConvert
否
ture/false
该参数只有在img=true情况下才使用.表示图片是否需要转换为jpg格式,若无该参数默认为false.
userId
否
null
上传文件的用户id
3.3FUSServer设计
3.3.1物理部署方式
FUSServer和StorageServer有多种组合方式:
1〕单一Server
FUSServer和StorageServer同时部署在一台机器上.这也是本次开发首先要支持的方式.
2〕单一FUSServer,多StorageServer
FUSServer连接多个StorageServer.FUS和Storage的连接,现在采用NFS或GFS方案.即:
FUS如同访问本地文件一样,访问各个Storage的目录.
对于来自各个WebAPP的调用,FUS根据事先定义的规则,选择其中一台StorageServer,进行存储.规则如下:
每个WebAPP有唯一的id.在FUSServer内数据库中已义了该应用使用的唯一<?
?
?
>storageServer的domain、IP、NFS下的目录路径.
3〕多FUSServer,多〔或单一〕StorageServer
负载增加后,可能会增加多台FUSServer.通过第三方的负载平衡机制/设备,将来自WebAPP的请求分担到多个FUSserver,但对外的domain只有一个.
3.3.2核心类的设计
UploadAction.java类的功能:
要根据uploadify控件决定是用servlet还是action,故此部分目前尚不定,等对uploadify控件研究明白后再定.
〔1〕、负责接收客户端传来的文件上传参数,这些参数是在客户端由文件上传组件进行构造并封装的.其工作模式如下:
Form表单属性约定如下:
参数名
必须
取值范围
说明
1
appId
是
数值
表示是哪个应用在调用文件服务器的上传.
该值是通过本文档4.1创建应用后所得的值.
2
files
是
File
页面提交的文件流.
3
sizeLimit
否
数值
所上传的每个文件的最大byte数.
4
picZoom
否
ture/false
表示图片是否需要缩放处理〔按照指定的width和height来设置缩放后的图片大小〕,若无该参数默认为false.若有该参数,则同时必须有width和height参数〔可只有1个,若只有一个,则另一个为等比例缩放〕.
5
maxWidth
否
数值
表示图片所裁剪的宽度像素数.
6
maxHeight
否
数值
表示图片所裁剪的高度像素数.
7
thumSize
否
字符串
值:
小图宽*小图高;中图宽*中图高
该参数只有在img=true情况下才使用.表示为该图片提供缩略图,系统会生成小图、中图,他们的名字分别为原图最终文件名添加尾缀字母方式.若无该参数,表示无需生成小图和中图缩略图.
例如:
原图的上传后最终文件名为201112190001.jpg
小图文件名为201112190001_s.jpg
中图文件名为201112190001_m.jpg
8
imgConvert
否
ture/false
该参数只有在img=true情况下才使用.表示图片是否需要转换为jpg格式,若无该参数默认为false.
9
userId
否
数值型
可以为空
〔2〕验证参数的有效性.例如:
文件大小超过sizeLimit限制.若发现错误,要把错误信息传递到前段页面.appId的验证.Rerferer中SERVER_NAME是否跟该appId的域名一致.
〔3〕调用相关的工具类完成相应指定的功能,例如:
图片缩放、转成jpg、生成缩略图等等.
〔4〕根据预先设定的规则〔具体规则详见处〕将图片保存到指定的StorageServer.
根据该appId得到该文件需要存放到哪个StorageServer上,然后根据该Storage的pathPattern属性获得该文件的文件名格式.具体文件路径命名参见部分.
接收到的所有文件要记录日志.若发现文件非法或者出现异常,需要返回客户端提示错误信息.
〔5〕将最终文件路径反馈到应用层页面.由文件上传组件得到路径信息,并并调用callback参数〔即是所指定的函数名〕.
AppAction.java类的功能:
完成对应用的注册、配置等工作.Web应用的基本属性如下:
id——应用的主键
appName——应用的名称
appInfo——应用描述
valid——该应用是否还有效,true/false
createDate——创建日期
storages——该应用可以存储在某一个或多个StoragesServer服务器上.
StorageAction.java类的功能:
完成对StorageServer的注册、配置等工作.每个StorageSever的基本属性如下:
id——StorageServer的主键
domain——域名,例如:
ip——IP地址,例如
valid——是否有效,true/false
local——存储文件的逻辑路径,例如:
/pic1/
pathPattern——存储文件的路径的生成格式,例如%l%a%e%d%t%c5%f
info——该服务器的说明
createDate——创建日期
3.3.3文件路径命名约定
每个Storage在初始配置的时候,都有pathPattern属性,来定义存储文件的路径的生成格式,例如:
%l%a%e%d%t%m%c5%f.各部分的说明如下:
文件名必须全部小写
默认:
%l%a%e%m%f
1
配置文件中的local,如:
/pic1
%l
/pic1/
2
应用的appID,如app1
%a
/pic1/app1/
3
文件的扩展名,全小写,如jpg
%e
/pic1/app1/jpg
4
日期,按照/年/月/日的格式
%d
/pic1/app1/jpg/2012/01/04
时间戳取模最后两位/最后三四位,
%m
/pic1/app1/jpg/43/48/
5
时间,精确到毫秒
%t
6
随机数,可指定位数
%c+位数
7
文件名,用户指定的文件名称,时间戳+三位随机数.
%f
.jpg
4数据库设计
APP〔Web应用表APP〕
字段名
描述
类型
备注
ID
主键
int<4>
DOMAIN
varchar<100>
APP_NAME
应用名称
varchar<100>
APP_INFO
应用描述
varchar<1024>
VALID
是否有效
tinyint
0-无效1-有效,默认1
CREATE_DATE
创建日期
timestamp
STORAGE〔StorageServer服务器表Stroage〕
字段名
描述
类型
备注
ID
主键
int<4>
DOMAIN
域名
varchar<100>
IP
IP地址
varchar<15>
VALID
是否有效
tinyint
0-无效1-有效,默认1
LOCAL_path
存储文件的逻辑路径
varchar<100>
如/pic1/
PATH_PATTERN
存储文件的路径的生成格式,如
%l%a%e%d%t%c5%f
varchar<100>
%l%a%e%m%f
INFO
该服务器的说明
varchar<400>
CREATE_DATE
创建日期
timestamp
APP_STORAGE〔Web应用表与StorageServer服务器关系表Stroage〕
字段名
描述
类型
备注
APP_ID
STORAGE_ID
FILE_LOG〔文件上传日志表〕
字段名
描述
类型
备注
id
主键
bigint
uuid
int<4>
文件名,时间戳+3位随机数
app_id
来自哪个应用
int<4>
user_id
bigint
可以为空
storage_id
来自哪个StorageServer
int<4>
relative_path
文件真实路径
varchar<200>
除StorageLocal外的全路径,不含文件名,例如:
/app1/673/20111219/
real_name
原文件名
varchar<100>
客户端在文件上传时,原文件名
file_ext
文件扩展名
varchar<100>
file_size
文件大小
int
create_date
上传日期
timestamp
width
图片高度px
int<7>
只有图片文件才有该属性
height
图片宽度px
int<7>
只有图片文件才有该属性
5项目目录结构
fus
├─src/main/java
│└─.eavic.fus
│├─mon——提供工具的通用根包
│├─front——对外提供上传服务的根包
││├─action——存放action类
││├─dao——存放dao类
││└─service——存放Service接口
││└─impl——存放Service实现
│├─system——后台管理的根包
││├─action——存放action类
││├─dao——存放dao类
││├─entity——存放实体类
││├─vo——存放值对象类
││└─service——存放Service接口
││└─impl——存放Service实现
│……
├─src/main/resource——存放该web应用所需的资源文件和配置文件
├─doc——存放该项目的一些相关文件
└─WebRoot
├─mon——存放该应用的通用jsp〔403.jsp、404.jsp、500.jsp、meta.jsp、taglib.jsp〕
├─css——存放该应用的css样式文件
├─js——存放该应用的js脚本文件
│└─fus.js
├─images——存放该应用的图片文件
└─WEB-INF
├content——存放各个功能模块的jsp页面
├lib——存放各个jar
└web.xml——应用的web.xml
5.1.eavic.fusmon包
该包内提供了通用工具类,例如,图片裁剪、转jpg格式等.
5.2.eavic.fus.front包
该包为对外提供上传服务的根包.
Ø.eavic.fus.front.action包
UploadAction.java该类为实现上传的核心类[要根据uploadify控件决定是用servlet还是action,故此部分目前尚不定,等对uploadify控件研究明白后再定.],接收所有参数,具备函数:
⏹publicStringexecute<>;//进行文件的验证、处理、保存等操作.
Ø.eavic.fus.front.dao包
FileLogDao.java该类为对所上传文件记录日志的核心类.
Ø.eavic.fus.front.service包
FileLogService.java该类是实现对文件上传后的保存日志功能.
5.3.eavic.fus.system包
Ø.eavic.fus.system.action包
AppAction.java该类为对系统的应用进行注册、查看、设置无效等操作的类.
StorageAction.java该类为对Storage服务器进行注册、查看、设置无效等操作的类.
LoginAction.java该类为登录,进行登录验证操作.
Ø.eavic.fus.system.dao包
AppDao.java该类为对所有应用的管理的核心类.
StorageDao.java该类为对所有Storage服务器的管理的核心类.
UserDao.java该类为对所有登录账户的管理类.
Ø.eavic.fus.system.entity包
App.java该类为所有应用的实体类.
Storage.java该类为所有Storage服务器的实体类.
User.java该类为本系统的登录用户类.
Ø.eavic.fus.system.service包
AppService.java该类是实现对App应用的管理功能.
StorageService.java该类是实现对Storage服务器的管理功能.
UserService.java该类是实现对登录账户的管理功能.
5.4src/main/resource包
application.properties文件中存放系统的主要配置文件,其中的关键配置项.
⏹fileRoot=/u01/item/data/fus/
说明:
所有上传文件的根目录,即挂载其他NFS服务器时,目录均挂载在此目录下.
6文件服务器的后台管理
6.1用户管理
对登录本FUSServer系统的账户进行添加、修改、删除.
6.2应用管理
对参与文件上传的Web应用进行注册、配置等管理.
6.3StorageServer管理
对StorageServer的注册、配置等管理
6.4查看所有图片
文件服务器所接收到的所有文件、图片等,均保留日志,允许管理人员通过后台,以列表形式查看文件情况.
界面原型设计如下:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 文件服务器 规划 设计 文档