电子文件资料管理系统开发文档Word文档下载推荐.docx
- 文档编号:19358692
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:86
- 大小:256.11KB
电子文件资料管理系统开发文档Word文档下载推荐.docx
《电子文件资料管理系统开发文档Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《电子文件资料管理系统开发文档Word文档下载推荐.docx(86页珍藏版)》请在冰豆网上搜索。
ServerSocketAction.java源代码59
SocketAction.java源代码61
filedownloadAction.java源代码64
附录266
Information_Port源代码67
MainPro源代码70
Progress.java源代码71
Server_Port.java源代码72
UI.java源代码75
DiskCode.java源代码79
UIDeCode.java源代码80
一、功能简介
随着时间的积累,文件资料变得越来越多。
在短短3年的时间里文件资料已经增长到了2T并且正在快速增长,查找和管理变得越来越困难。
但是传统的FTP软件只拥有简单的查阅和下载功能而且没有搜索功能,已经无法满足大数据条件下的资料管理和快速有效的查找文资料。
中队在资料管理方面迫切需要一款能够有效管理大量数据文件资料的软件。
首先软件需要完成以下功能:
1.类似于FTP软件的文件浏览浏览功能。
2.资料文件的单个下载。
3.资料文件的批量下载。
4.文件的精确搜索。
5.文件夹的精确搜索。
6.文件的模糊搜索。
7.文件夹的模糊搜索。
8.文件的范围精确搜索。
9.文件夹的范围模糊搜索。
10.权限控制,根据登录账号的类型,拥有不同的权限。
例如超级管理员拥有上传、下载、修改以及后台操作数据库的权限。
而普通用户只有下载和查看的权限。
二、整体架构
程序采用B/S的全局架构,B/S结构即浏览器和服务器结构。
它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。
在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。
B/S结构是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。
这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。
客户机上只要安装一个浏览器(Browser),如NetscapeNavigator或InternetExplorer,服务器安装Oracle、Sybase、Informix或SQLServer等数据库。
浏览器通过WebServer同数据库进行数据交互。
这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。
程序前端采用JSP实现文件夹结构的显示。
核心采用Strtus2作为程序核心处理模块。
所有JSP网页采用全动态显示技术。
JSP在服务器端运行后,动态的生成所需要的HTML5+CSS3标签语言的语句。
实现网页标签语句由服务器自动生成。
如图1所示。
图1架构总体图
Struts2是Struts的下一代产品,是在struts1和WebWork的技术基础上进行了合并的全新的Struts2框架。
其全新的Struts2的体系结构与Struts1的体系结构差别巨大。
Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts2可以理解为WebWork的更新产品。
虽然从Struts1到Struts2有着太大的变化,但是相对于WebWork,Struts2的变化很小。
当Web容器收到请求(HttpServletRequest)它将请求传递给一个标准的的过滤链包括(ActionContextCleanUp)过滤器,然后经过Otherfilters(SiteMesh,etc),接下来需要调用FilterDispatcher核心控制器,然后它调用ActionMapper确定请求哪个Action,ActionMapper返回一个收集Action详细信息的ActionMaping对象。
接下来FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(ConfigurationManager)从配置文件中读取配置信息(struts.xml),然后创建ActionInvocation对象,ActionInvocation在调用Action之前会依次的调用所用配置拦截器(InterceptorN)一旦执行结果返回结果字符串ActionInvocation负责查找结果字符串对应的(Result)然后执行这个ResultResult会调用一些模版(JSP)来呈现页面,之后拦截器(InterceptorN)会在被执行(顺序和Action执行之前相反)最后响应(HttpServletResponse)被返回在web.xml中配置的那些过滤器和(核心控制器)(FilterDispatcher)。
三、文件浏览功能实现
文件浏览功能的实现分为三个步骤:
1.生成后的网页如图2所示:
图2网页前端页面
2.页面核心代码如下所示:
<
%
intdl=(int)session.getAttribute("
directoryNumber"
);
for(intj=0;
j<
dl;
j++)
{
Stringip=request.getLocalAddr();
Stringdname=(String)session.getAttribute("
directoryname"
+j);
Stringdurl=(String)session.getAttribute("
directory"
Stringdsize=(String)session.getAttribute("
directorysize"
Stringdirectory="
<
trclass='
li'
>
tdid='
name'
ahref='
filesearch?
url="
+durl+"
'
imgsrc='
imgs/文件夹.png'
onclick='
submit()'
span>
"
+dname+"
/span>
/a>
/td>
td>
+dsize+"
ahref='
FolderZIP?
&
name="
IP="
+ip+"
spanid='
down'
下载<
/tr>
;
out.append(directory);
out.flush();
}
intfl=(int)session.getAttribute("
fileNumber"
fl;
Stringfname=(String)session.getAttribute("
filename"
Stringfurl=(String)session.getAttribute("
file"
Stringfilesize=(String)session.getAttribute("
filesize"
Stringfile="
filedownload?
+furl+"
filename="
+fname+"
imgs/文件.png'
onclick='
+filesize+"
下载<
out.append(file);
%>
3.用户通过网页点击网页上的文件夹,产生一个请求。
服务器获取请求,交给Action类处理。
关键代码如下所示:
for(inti=0;
i<
List.length;
i++)
{
if(List[i].isFile())
{
System.out.println("
文件:
+List[i]);
session.put("
+fileNumber,(List[i].length()/1000000)+"
Mb"
+fileNumber,List[i].getPath());
+fileNumber,List[i].getName());
fileNumber++;
}
}
for(inti=0;
if(List[i].isDirectory())
文件夹:
文件夹名:
+List[i].getName());
+directoryNumber,List[i].getPath());
+directoryNumber,List[i].getName());
+directoryNumber,(List[i].length()/1000000)+"
directoryNumber++;
}
session.put("
fileNumber);
directoryNumber);
returnSUCCESS
在文件浏览是,为了防止用户访问服务器的其他区域,需要加一个访问路径的限定,实现代码如下所示:
publicStringexecute(){
session.clear();
if(url.indexOf("
j:
\\file"
)==-1){//规定文件路径访问范围范围(\\代表\)
System.out.println(url.indexOf("
));
returnERROR;
}
4.FileSize.java实现文件的计算,因为文件夹内部有很多个文件,全部计算耗费的运算资源是巨大的。
所以只计算单个文件的大小。
当文件大小小于1MB时,文件已无大小计算必要,所以不计算大小,与文件夹一样大小显示为0MB。
关键代码如下所示:
publicvoidgetsize(Filefile){
File[]List=file.listFiles();
System.out.println("
该目录下对象个数:
+List.length);
i++){
if(List[i].isFile()){
System.out.println("
num++;
size=size+List[i].length()/1000000;
if(size>
3000||num>
15000){//大于2G
break;
if(List[i].isDirectory()){
getsize(List[i]);
Strtus2获取文件夹列表后,将文件名、文件路径、文件大小存入session内,然后根据session里内容的不同,在服务器端生成相应的页面代码。
返回给用户浏览器,完成一次浏览。
如图3所示:
图3响应页面
四、单个文件下载功能实现
单个文件的下载采用Strtus2实现。
首先需要配置一个Action的拦截器,拦截filedownlaod请求。
打开Strtus.xml配置一个Action,具体代码如下所示:
<
actionname="
filedownload"
class="
UPDownload.filedownloadAction"
!
--下载-->
resultname="
success"
type="
stream"
>
<
paramname="
contentType"
application/octet-stream<
/param>
--文件类型(无限制)-->
paramname="
contentDisposition"
attachment;
${getName()}"
--使用经过转码的文件名作为下载文件名——默认格式是attachment;
${fileName}"
,将调用该Action中的getFileName方法。
-->
inputName"
downloadFile<
--inputName流对象名——比如这里写inputStream,它就会自动去找Action中的getInputStream方法。
bufferSize"
4096<
--bufferSize下载文件的缓冲大小-->
/result>
/action>
Action拦截到filedownlaod请求后,将请求参数传递给filedownaction处理。
其中请求参数filename表示文件的名称,url文件在服务器磁盘的绝对路径。
具体代码如下:
privateStringfilename;
privateStringurl;
publicStringgetName(){
byte[]b;
try{
filename:
+filename);
b=filename.getBytes();
Strings=newString(b,"
ISO8859-1"
returns;
}catch(UnsupportedEncodingExceptione){
错误!
e.printStackTrace();
}
returnfilename;
publicStringgetFilename(){
publicvoidsetFilename(Stringfilename){
this.filename=filename;
publicInputStreamgetDownloadFile()
try{
return(newFileInputStream(url));
}catch(FileNotFoundExceptione){
FileNotFound"
e.printStackTrace();
returnnull;
publicStringexecute(){
returnSUCCESS;
图9实现单个文件下载的Action类
当用户点击下载,后会出现如图4所示的下载框。
用户可选择文件存储位置以及修改文件名称,点击保存后,开始下载。
如图5所示:
图4下载框
图5文件开始下载
五、文件夹下载功能实现
文件夹下载采用客户端方式实现,首先介绍服务器端的程序。
用户在浏览器上点击下载,然后浏览器产生一个FolderZIP请求。
Strtus2拦截到FolderZIP请求后将请求参数文件夹路径url、用户IP、文件夹名称name传递给SocketAction处理。
拦截器配置文件如下所示:
FolderZIP"
TestSocket.FolderZIP"
--文件夹
/SocketSuccess.html
error"
/Socketerror.jsp
SocketAction在54321号端口建立Socket通信。
成功连接客户端后发送通信数据包,通信数据传输、数据包结构如下所示:
Socketclient_Inf=newSocket(IP,54321);
开始发送通信数据包..."
client_Inf.getOutputStream();
FileDownloadPackagefiledownloadPackage=newFileDownloadPackage();
filedownloadPackage.Header="
CreateFolder"
filedownloadPackage.SourseIP=client_Inf.getLocalAddress().getHostAddress();
filedownloadPackage.Port=client_Inf.getLocalPort();
filedownloadPackage.Name=name;
filedownloadPackage.Location="
filedownloadPackage.Blank="
123"
ObjectOutputStreamoos=newObjectOutputStream(client_Inf.getOutputStream());
oos.writeObject(filedownloadPackage);
发送通信数据包成功..."
oos.flush();
r.delay(1000);
oos.close();
client_Inf.close();
r.delay(2000);
/**
*文件夹下载数据结构
*/
privatestaticfinallongserialVersionUID=1L;
publicStringHeader;
//文件头CreateDirectorFolder
publicStringSourseIP;
//发送方IP
publicintPort;
//发送方端口
publicStringName;
//文件夹名称
publicStringLocation;
//需要创建的位置,j:
/file的后续位置例如Location=/g1
publicStringBlank;
//保留位
客户端接收到通信数据包后解析,数据包内容,打开59999号端口准备接收文件。
在下载之前需要进行文件夹大小计算,如果文件夹总大小大于等于3GB这停止递归调用,返回Size,当文件夹计算函数返回error,提示用户下载文件夹过大,建议分开下载。
文件夹大小计算函数如下所示:
/**
*验证文件夹大小
FileSizefs=newFileSize();
fs.getsize(newFile(url));
if(fs.num>
10000||fs.size>
3000){//文件数目>
10000文件大小大于3G
System.out.println("
文件大小="
+fs.size);
文件个数="
+fs.num);
return"
如果计算文件大小小于3GB,服务器调用ZIP类,实现指定文件夹的压缩打包。
ZIP类的主要方法为遍历文件夹,将文件夹内的文件依次压缩。
ZIP类代码如下:
publicclassZIP{
/**创建一个压缩文件,from为文件夹路径,to为创建好后压缩文件路径*/
publicvoidCreateZip(Stringfrom,OutputStreamto)throwsIOException
{
List<
File>
list=getFiles(from);
ZipOutputStreamout=newZipOutputStream(to);
for(Filef:
list)
InputStreamin=newFileInputStream(f);
Stringname=getRelName(from,f);
ZipEntryen=newZipEntry(newFile(from).getName()+"
/"
+name);
en.setSize(f.length());
out.putNextEntry(en);
out.setComment("
中文测试"
intlen=0;
byte[]buffe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 文件 资料 管理 系统 开发 文档