大文件上传

2024-06-12

大文件上传(通用9篇)

大文件上传 篇1

1、引言

随着计算机网络技术的快速发展, Web应用系统以其友好的用户界面, 较低的维护和升级成本, 良好的扩展性, 较高的信息共享度等优势, 迅速成为当今企业级应用的主要形式。在Web应用系统中经常需要向用户提供基于Web的文件上传功能, 如:网络硬盘服务系统, 邮件服务系统, 网络电子像册, 网络视频发布系统, 电子图书馆资料管理系统, 局域网文件交换系统。作为web系统开发的主流技术之一, PHP是一种跨平台的服务器端的嵌入式脚本语言。在这众多的应用中, 如何在PHP实现大文件高效上传是一个需要解决的问题。

湛江师范学院网络与教育技术中心在实现个人网络文件管理系统的过程中, 专门对这一问题进行了研究, 提出了基于PHP大文件上传的解决方案, 并应用到学校个人相册系统和教学管理系统中, 取得了良好的效果。

2、PHP文件上传的传输方式

PHP中实现文件的上传可以采用两种方式即采用HTTP协议和FTP协议实现, 二者在传输的原理上存在很大的差异。

HTTP是指超文本传输协议, 是互联网上应用最为广泛的一种网络传输协议。HTTP是一种基于请求/响应模式的协议, 客户机与服务器建立连接后, 发送一个请求给服务器, 随后附有MIME信息[1]。而基于FORM表单的文件上传, 文件的信息和内容正是封装在MIME信息内发送到服务器端的。[2]

FTP是指文件传输协议, 主要用来在网络上传输文件。这种方式传输稳定、系统资源占用率低、对文件大小没有限制, 服务器的部署比较复杂, 需要使用特定的软件来完成上传和下载, 而且功能单一、权限设置复杂, 一般用于专业的文件传输, 对于普通用户来说实用性不高。[3]

Http协议和Ftp协议传输的比较:[4]

1) 用HTTP协议上传, 更适合web编程的方便性;HTTP使用浏览器作为客户端软件, 界面友好, 操作简单, 可以通过WEB表单机制实现文件的上传。因此HTTP的文件上传可以集成在web页面中, 易用性、实用性较强。

2) 用FTP协议上传文件大于1M的文件速度比HTTP快。文件越大, 上传的速度就比HTTP上传的速度快数倍。

3、目前PHP大文件上传的实现方式

3.1 服务器组件上载方式:

该方法以PECL扩展模块uploadprogress为代表。uploadprogress已经正式放入PECL了, 早期叫做"Upload Progress Meter"。通过AJAX方式获取文件信息, 然后在浏览器中显示上传进度条的。这个扩展只能用于PHP 5.2或以上版本。该扩展模块的优点是运行稳定, 功能强大, 对浏览器没有任何要求。其缺点就是它的开发是基于linux, 在windows操作系统下很不稳定和需要在服务器上安装扩展模块。

3.2 浏览器组件上载方式:

该方法以SWFUpload、纵横http文件上传组件为代表。该方法的优点是对服务器无要求, 不需要在服务器上安装组件, 并且能提供文件上载所需要的各种功能:上载大文件、限制上载文件的大小、上载多个文件、显示上载进度条。其缺点也比较明显, 需要注册浏览器组件 (在客户端) 。

利用第三方所开发的组件, 可以减少WEB应用系统开发工作量, 缩短开发周期, 实现简单, 无上传文件大小限制, 稳定性、上传效率等方面都非常不错, 而且界面友好, 普遍都提供了上传进度指示等附加功能。但存在的问题是:使用第三方组件可能会带来无法预料的安全性和可靠性问题;但绝大多数组件只适合于上传小文件 (30MB以下) [5], 当文件较大时大部分组件上传速度慢;优秀的组件一般都为商业软件, 需要付费才能使用。

4、PHP大文件上传的设计与实现

综合上述分析, 在学校个人网络文件管理系统开发中, 设计了利用上传表单和PHP语言的FTP函数来实现大文件上载。

4.1 系统环境及设置

服务器软件环境:Linux OS、Apache2.4、MySQL4.1、PHP5.2、VSFTP。软件的具体安装在此不再介绍。为了能支持上传大文件, php.ini配置文件必须修改如下:[6]

upload_max_filesize=500m;即允许上传文件大小的最大值。

post_max_size=500m;指通过表单POST给PHP的所能接收的最大值

max_input_time=600;每个PHP页面接收数据所需的最大时间

memory_limit=32m;每个PHP页面所需的最大内存

4.2 功能设计与实现

4.2.1 用户FTP帐号的安全

登录远程FTP服务器有两种方式, 一种是注册用户登录, 另一种是以匿名方式登录。出于安全的考虑, 在系统中采用了第一种方式。利用网页表单收集用户填写的资料存储到MySQL数据库内, 同时以该用户的注册名创建一个FTP上传账号, 密码由系统以密钥形式自动生成。MySQL数据库的用户表 (USER) 见表1。用户认证登录管理系统时, 通过select语句获取FTP帐号和密码, 并利用Cookie存放, 以供连接和登录FTP服务器时使用。

4.2.1 FTP函数上传

第一步:确信你拥有连接/上传到FTP服务器的权限。PHP的FTP函数需要客户端-服务器连接, 所以在文件上传之前需要登录目标服务器。

第二步:创建上传表单。在系统中上传文件的大小受PHP INI配置和用户所允许上传的上限影响。在文件上传之前先在本地进行文件大小、类型检测, 如果符合要求, 则上传之, 否则重新选择上传文件。

第三步:创建PHP上传处理程序。一旦表单被提交给了Web服务器, 下一步是使用PHP的FTP函数按照用户提供的访问信任书把它传输到目标服务器上。文件上传成功与否还与网络操作的最大可执行时间有密切联系。因此系统根据上传的文件大小来设定最大可执行时间, 这样可以避免出现:设置过小时, 因为超时而导致上传失败;设置过大, 当上传早已失败时, 用户还要经过长时间等待后才返回到表单。下面就是完成上述功能的部分代码。

5、结束语

本文提出的解决方案是基于PHP, 能够在不需要第三方组件的支持下, 以FTP传输协议传送文件, 高效地实现基于Web的大文件上传, 具有跨平台性和可扩展性, 易于在不同的文件管理系统中移植。简单直观的Web界面方便了用户的操作和使用。

参考文献

[1].IETF.Hypertext Transfer Protocol--HTTP/1.1.[EB/OL].[1995-08].http://www.ietf.org/rfc/rfc1867.txt?number=1867.

[2].IETF.Form-based File Upload in HTML[EB/OL].[1995-08].http://www.ietf.org/rfc/rfc2616.txt?number=2616.

[3].李颖云, 张克.基于asp.net的文件上传和下载[J].电脑知识与技术, 2007, 6:1549-1550.

[4].孙占东, 姜加虎.用ASP实现无组件的文件上传[J].计算机应用, 2003, 23[9]:136-138.

[5].林天华, 马素霞, 赵霞.基于Web的大文件上传技术研究[J].科技导报, 2007, 25[16]:30-33.

[6].Annoymous.PHP中上传大体积文件时需要的设置[EB/OL].[2006-04].http://tech.ddvip.com/2006-04/11445556204644.html.

大文件上传 篇2

很多菜鸟朋友苦于网吧中没有CuteFTP等上传工具,无法将更新的主页文件传到服务器上,如果下载一个CuteFTP软件则费时又费事,毕竟在网络上谁都能体会到“时间就是金钱”的深刻含义。现在让我来教你一招,键入几个简单的FTP命令,就可以完成更新这项工作啦。

先假设笔者在中华网服务器上的个人主页帐户信息为:

FTP Server: home4u.at.china.com

User: xiaoyuge

Password: abc123

现在让我们打开Windows的开始菜单,执行“运行”命令,在对话框中输入ftp命令,按下“确定”按钮执行。

其时将会切换至DOS窗口,出现提示符

ftp>

现在让我们输入命令连接FTP服务器:

ftp> open home4u.at.china.com (回车)

稍等片刻,屏幕提示连接成功:

ftp> connected to home4u.china.com (回车)

接下来服务器询问你用户名和口令,分别输入xiaoyuge和abc123,待认证通过即可。

下面进入正题,开始上传文件,比如说我们要把a:index.html传至服务器的根目录中,可以这么键入:

ftp> put a:index.html (回车)

当屏幕提示你已经传输完毕,可以打入相关命令查看一番:

ftp> dir (回车)

(注:没人真的会傻到直接把A:盘的东东传至服务器中吧?当然是先拷贝至硬盘中再上传啦,

^_^)

刚刚讲的是上传,现在来看下载。假设要把服务器images目录中的所有.jpg文件传至本机中,按以下指令操作:

ftp> cd images(回车) [注:进入images目录]

ftp> mget *.jpg

上传与下载工作完毕,可以运行bye中断连接。

ftp> bye(回车)

最后为了方便大家记忆,总结一下常用的FTP命令:

1. open:与服务器相连接;

2. send(put):上传文件;

3. get:下载文件;

4. mget:下载多个文件;

5. cd:切换目录;

6. dir:查看当前目录下的文件;

7. del:删除文件;

8. bye:中断与服务器的连接。

命令虽然简单,但不一定人人皆知;再说“养兵千日,用兵一时”,说不定什么时候就会用得着的呢。如果想了解得更多,就打ftp> help (回车)查看命令集吧。

大文件上传 篇3

本文设计不仅实现了文件的上传和下载,还针对一些较大文件的上传提出了一种分块上传的思想。先指定用户想要的文件块的大小,这个值决定了文件要被分割的块数,较大的文件分割成若干块,每块都以一条记录的形式写到数据库中。当某条记录写数据库失败时,只需将那些写数据库失败的文件块重新上传,不需要将整个文件重新上传。采用这种方式可以提高文件上传的效率,节约重新上传时写数据库的时间。但下载时,如果用户需要完整的原始文件,原来属于同一个文件的分块则需要重新写到一个文件中。本文使用边下载、边合并的方法,实现了分块文件的合并下载。用户可以根据自己的需要,针对性地下载其中的部分文件块。读取一个文件分块相比读一个完整的大文件要快很多,文件的分块与合并提高了文件的上传下载效率。值得注意的是,在设置文件分块时,分块的大小要适度,否则会影响软件的运行效率[3],用户可以根据实际要求设置文件分块的大小。

1 大文件分块上传和下载软件的实现

1.1 文件的分块

将一个较大的文件上传到数据库时,上传速度往往会受到网络宽带的影响。针对较大文件的保存与管理,需对其进行分块,可以根据网络的带宽设置文件块的大小,假设每个文件上传的时间不超过5 s,设带宽为k Mb/s文件块的大小Block Size可以设置的范围最好能够满足式(1):

若文件块的大小用Block Size表示,则文件分成的块数n Count与文件的大小之间的关系为:

其中Flength代表原始文件的大小,K代表最后一个文件分块的大小。因为文件的大小与文件块的大小不一定刚好是整除的关系。最特殊的情况就是某文件的大小刚好小于文件块的大小,此时的文件就只有一块,即该文件本身。

1.2 分块文件的上传

将分块文件上传到数据库之前,首先要在数据库中创建一个存储文件信息表,并定义相关的字段,方便用户查询和管理[4]。数据库表中主要的相关字段包括:文件编号、文件名、文件大小、基本路径、相对路径、文件块大小、文件块编号、文件类型、文件内容等。

文件上传到数据库主要步骤为:(1)将文件的名称、路径、大小、类型等基本信息写入数据库;(2)根据这些基本信息查找对应的记录,并将文件的内容写到blob字段中,文件内容以二进制的形式存贮在数据库中[5,6]。

文件分块上传时,首先连接服务器端的数据库,在数据库连接成功的条件下,遍历要上传的文件所在的路径。当查找到要上传的文件时,根据文件分块的大小,计算文件分割的块数和最后一个文件块的大小,从第一个文件块开始,计算过程如下:

(1)判断是否成功连接到数据库。

(2)判断这是否为最后一个文件块,如果是,则从文件中读取最后一个文件块,写入数据库后结束;否则从文件中读取Block Size个字节。

(3)用Insert命令在对应的表中写入文件的编号、文件名称、文件大小、文件的基本路径及相对路径、文件类型、文件块的大小和编号。

(4)通过文件编号、文件路径,文件名称和文件块编号查找相应的记录。

(5)将要写入数据库的文件内容保存在一个安全数组中,并调用Append Chunk()函数将该块文件内容填到对应的blob字段当中,并更新记录。

(6)为写入记录中的文件的路径、文件名以及文件块编号设置标记,方便重新上传时定位断点的位置,跳转到步骤(1)。

文件分块上传的流程图如图1所示。

如果服务器数据库与客户端的连接断开,将导致文件上传失败。在客户端与服务器端数据库重新建立连接后,需要续传文件,同时要通过断开数据库时的标记,找到上次上传文件的断点。

续传文件时,为了找到文件续传的起始位置,依然要遍历文件所在的路径,通过文件路径和名称找到对应的文件,再使用文件块的编号和文件块的大小获取下一次文件要上传的位置。设offset为文件指针的偏移值,Block No为文件块的编号,Block Size为文件块的大小,三者之间的关系如下:

式中,被标记文件块的编号Block No乘以文件块的大小Block Size,就是续传时读取文件的偏移值。通过这个方法,就可以找到断点所在的文件块位置,实现文件的续传,从而避免重新上传之前已经写入数据库的文件块。

1.3 分块文件的下载

因为文件是保存在数据库中的,用户可用通过SQL命令对数据库中的记录进行增删查改等操作,这比存储在FTP服务器中的文件处理要方便很多。下载的过程其实就是上传的逆过程,思想相似。

下载时根据相关的查询条件,如果存在符合条件的记录,即可对这些记录保存的文件进行下载,在成功连接到数据库的条件下,从第一条记录开始执行以下过程:

(1)判断是否成功连接到数据库。

(2)判断该记录是否超过最后一条记录编号,如果是,下载结束;否则跳转到步骤(3)。

(3)从记录中获取文件的类型、文件名以及相对路径,判断该文件是否已经存在,如果不存在,则根据文件的类型创建一个文件,以可追加的形式打开文件。

(4)调用Get Chunk()函数获取blob字段中的内容,并保存在一个安全数组中,最后将安全数组中的数据写入文件。

(5)关闭文件,并标记该记录中的文件路径、文件名以及文件块编号,并跳转到步骤(1)。

1.4 分块文件的合并

本文虽然实现了文件的分块下载,但是在实际情况中,人们通常希望使用完整的文件,而不是一个文件块,所以在下载的过程中需要将各个文件的分块重新合并成一个文件。本文采用的方法是在下载的过程中即可进行合并操作,文件合并下载的流程图如图2所示。

文件的合并是文件合并下载过程中的一部分,即每次下载某条记录中的文件内容时,先判断该文件块将写入的文件。

用户根据文件名称,文件路径等信息查找所需要的文件,如果存在符合条件的记录,就依次访问这些记录,并将每条记录中的文件内容读取出来,写入相应的文件中。从查询到的第一条记录开始:

(1)判断是否已经访问了最后一条符合条件的记录,如果是,则结束,否则转到步骤(2)。

(2)获取文件的路径、文件名称、文件类型等基本信息,判断当前路径下是否已经存在这样的文件,如果不存在,将创建一个对应的文件;否则跳转到步骤(3)。

(3)将记录中的文件相对路径、文件名两个字段的内容与上一条记录中的相对路径和文件名匹配,如果相同,则将文件内容追加到该文件;否则根据该文件块的基本信息重新创建一个文件。

(4)标记该条记录并移到下一条记录,并跳转到步骤(1)。

所有记录被访问完的同时,所有的文件分块都被写入了相应文件中,既不会出现文件内容的覆盖问题,也不会额外地占用存储空间。

2 实验分析

通过测试发现,文件的完整上传所消耗的时间最短,但是上传失败后要重新上传整个文件。如果使用文件的分块上传,文件分块的大小要适当,分块越多,上传的速度就越慢。因为记录每个分块文件的基本信息也要消耗一定的时间,在上传失败需要重新上传的情况下,只需上传剩下的没有上传成功的文件,效率有所提高。在下载的过程中,单块文件明显比整个文件的下载要快,因为单块文件下载只需要读取块数据。而文件的合并下载时间比整块文件下载时间要长,因为在合并的过程中要判断各个文件块是否来源于同一个原始文件,会消耗一定的时间。

相对于普通的将文件上传到FTP服务器,本文实现了基于Oracle数据库的大文件分块上传下载应用软件,将文件的内容以二进制的形式分散保存在Oracle数据库中,这不仅可以对大量数据信息进行管理,还可以使得不同的用户共享很多数据信息。文件的分块上传采用文件分割技术,将文件分块保存在数据库中。通过文件的续传,避免了由于各种网络原因导致的写数据库操作失败,需要将整个文件重新上传的问题。文件的合并下载解决了同一个文件中不同分块的合并问题,避免了先下载文件再进行合并的做法,提高了软件的运行效率。

摘要:针对大文件在网络存储过程中可能存在的上传和下载失败问题,提出了一种利用数据库进行分块存储和管理较大文件的方法。将一个较大的文件分割成多块,分别对分割后的每一块进行上传或下载,从而避免了网络因素对直接上传和下载较大文件所产生的影响。测试表明,通过所提出的分块与合并方法,可以有效地避免文件上传和下载过程中可能出现的失败问题,提高了上传和下载的效率。

关键词:文件存储,oracle数据库,文件上传,文件下载,文件分块,分块合并

参考文献

[1]冯素梅.基于FTP的文件上传与下载研究[J].北京电力高等专科学校学报(自然科学版),2010,27(5):197-199.

[2]陶宏才.数据库原理及设计[M].北京:清华大学出版社,2007.

[3]张翼.BLOB数据优化算法及其应用[J].计算机测量与控制,2011(6):1478-1480.

[4]徐孝凯,贺桂英.数据库基础与SQL Server应用开发[M].北京:清华大学出版社,2008.

[5]谢华成,张昆朋,范黎林,等.基于文件分割的二进制大对象存取算法[J].计算机应用,2011,31(10):2612-2616.

tomcat上传中文名文件 篇4

(一)修改Tomcat配置文件方法:

找到Tomcat 目录,打开config/server.xml文件,添加一段代码即可。如红色的字体

URIEncoding=“utf-8”

protocol=“HTTP/1.1”

connectionTimeout=“20000”

redirectPort=“8443” />

这段代码规定了Tomcat监听HTTP请求的端口号等信息,可以在这里添加一个属性:URIEncoding,将该属性值设置为UTF-8,即可让Tomcat不再以ISO-8859-1的编码处理get请求。更改后的代码(红色部分为新添加的代码)

(二)Java代码实现

java.net.URLConnection和java.net.URL是远程读取文件重要的类。因为当前的文件名是中文,如果直接构造字符串http://localhost/download/中文文

件.txt 读取远程文件必要要出错。需要对“中文文件.txt”进行编码,如下代码:

try {

System.out.println(URLEncoder.encode(“中文文件.txt”, “utf-8”));}

catch(UnsupportedEncodingException e){

e.printStackTrace();

}

//输入结果为:%E4%B8%AD%E6%96%87%E6%96%87%E4%BB%B6.txt

大文件上传 篇5

关键词:ASP.NET,大文件上传,RadUpload

当前,ASP.NET因其拥有丰富的控件和强大的类库而成为开发动态Web程序的主流技术之一,利用它可以开发各种桌面软件或Web系统。大文件上传是许多系统开发中经常使用的功能模块,尤其对于一些视频网站而言,往往需要上传超大视频文件。然而ASP.NET内置的File Upload控件对上传大文件有限制,其影响了用户体验度。为此,探究基于ASP.NET的大文件上传具有现实意义。

1 ASP.NET中File Upload控件应用现状

ASP.NET是微软公司提出的一种专用于开发桌面软件或动态Web网页程序的技术,具有简便易用的特点[1]。File Upload是ASP.NET中经常用到的上传文件控件,其主要功能是向服务器指定的目录上传文件。File Upload控件具有如下优点:1)具有可视化的操作界面,借助Microsoft Visual Studio开发工具可以直接拖拽该控件至页面程序片段中即可,不需要编写程序实现;2)具有丰富的上传属性,如File Content、File Name、Has Fil等[2],可以利用它们快速获取上传文件信息;3)Save As方法调用灵活,程序片段中直接调用封装的Save As方法即可将本地文件上传至服务器。但是,File Upload在实际应用过程中也暴露出了一些问题:1)不适合大文件上传,默认情况下上传的文件仅限于4M以内;2)不具有文件上传进度条,用户体验度不高。为此,众多系统开发者选择了自己开发控件或借助第三方开源免费组件的方式来上传大文件。

2 ASP.NET中大文件上传解决方案

考虑到系统开发的高效性与稳定性,本研究拟采用第三方开源免费组件来解决大文件上传问题。文件上传模块的实现主要涉及到页面和数据库设计、后台程序的编写两方面技术。

2.1 文件上传模块设计

一般而言,文件上传模块在系统中的呈现方式是灵活多样的,其可以是单独的上传页面形式,也可以是嵌入在页面中的“附件”形式。而对于开发者来说,不管是何种上传形式,在文件上传页面中应能获取到文件名、文件简介、上传路径、上传作者、上传时间等关键信息,对应的数据库字段依次可设置为File Name、File Info、Up Dir、Up User、Up Time。

2.2 上传组件介绍

目前,网络上出现的第三方大文件上传组件很多,如Up-loadify、Fancy Upload、Ajax File Upload、jq Uploader和Rad Upload等[3]。此时选取一个适合当前系统开发需要的组件尤为重要,应注意如下原则:1)满足开发环境(Java/ASP.NET/Php等)的需要;2)操作简单,适合各级开发者使用;3)功能丰富、界面友好。结合笔者系统开发经验,本研究主要选取Rad Upload作为上传组件,其具有如下特点:1)适合ASP.NET开发环境要求;2)该组件和ASP.NET内置的File Upload控件进行了很好的融合,其属性和方法可互通,方便学习使用;3)对上传文件的大小没有限制,可以上传超大文件;4)带有可视化的上传进度条功能,用户体验度高;5)开源免费使用,便于二次开发。

2.3 关键技术

2.3.1添加Rad Upload组件引用

在Rad Upload组件包中 ,主要包括Rad Upload.Net2.dll、Telerik.Quick Start.dll和Rad Upload.Net2.xml三个文件。其中,Rad Upload.Net2.dll和Telerik.Quick Start.dll是Rad Upload上传组件的核心文件,封装了许多方法,如Save As、Get Files等;Rad Up-load.Net2.xml用户定义Rad Upload组件的界面及样式。系统开发中,需要将以上三个文件放置到Bin文件目录下面,然后在页面中分别添加以下代码即可引用。

1)在前台Aspx文件头部分别添加:

2)在后台CS文件中添加命名空间:using Telerik.Web Controls;

2.3.2编辑Web配置文件

Web配置文件可用来定义系统的全局变量及属性。在服务器调用Rad Upload组件方法前,需要在Web配置文件中添加声明,并设置上传文件的最大值和最长时间。其具体方法如下:

1)在“<system.web></system.web>”结点之间添加上传文件的最大值 和最长时 间 :<http Runtime max Request Length="307200" execution Timeout="3600"/>。此处表示上传的文件最大为300M,用时最长为1小时。

2)在“<system.web></system.web>”结点之间添加Rad Upload组件声明:

2.3.3编写服务器端代码

配置好以上参数后即可开始编写服务器端脚本。客户机中的文件上传是通过调用服务器端File Upload控件中的Button按钮事件来实现的,因此,上传文件的代码需要写在服务器端Button按钮事件中。关键代码如下:

3大文件上传模块实现效果

笔者曾参与多项大型系统研发工作,其中很多系统都使用到以上大文件上传解决方案。以广西中小学微课资源网为例,本网站是在广西教育厅教师培训中心的领导下建立的面向广西中小学教师征集优质案例资源的门户网站系统。该系统须承载高并发、大文件上传的基本需求,可以满足广大教师同时上传课堂录像文件(详见下图1)。实践结果表明,利用以上解决方案可以上传超过2G的视频文件,且系统运行稳定。

4结束语

基于ASP.NET的大文件上传是系统开发中经常遇到的一个棘手问题。利用第三方开源免费的大文件上传组件(如Rad Upload)可以有效解决文件上传问题。本文以Rad Upload为例描述了如何借助第三方组件实现大文件上传的技术方案,以期为相关研究领域和实践开发者提供参考借鉴。在后续研究中,我们将进一步探索大文件断点续传的技术方案。

参考文献

[1]张再华.基于ASP.NET的Web服务及其开发技术[J].软件导刊,2012(4):134-135.

[2]李志华,林财兴.利用File Upload控件实现多文件上传[J].科技信息,2008(28):390-391.

大文件上传 篇6

1 基于Java Web应用的软件体系结构

基于web应用的B/S(Browser/Server)结构就是三层C/S (Cli-ent/Server)结构的Internet上的软件体系结构。在现有的3层软件体系结构中,客户层和数据层己被严格定义。与此相反,中间层并未明确定义,而且,中间层可以包括有与应用程序的界面和长久的数据存储无关的处理。我们所讨论的新的基于Web的3层体系结构集中在客户层和中间层。假定将中间层划分成许多服务程序是符合逻辑的,一个基于Web的应用程序又可将中间层划分成许多服务程序,这样将每一主要服务都视为独立的层,使得3层体系结构可变成N层体系结构。一个基于Web的应用程序一般包含如下几层:

1层,由Web浏览器实现的一个客户层的界面。

2层,由Web服务器实现的一个中间层的任务分配机制.

3层,由一些服务器端脚本(Script)实现的中间层服务。

4层,由关系数据库实现的数据层存储机制。

SSH2框架的详细设计:

SSH2 开发框架是遵从MVC设计模式的,将前台交互界面交给“视图层”处理,“控制层”实现分发逻辑请求,“模型层”负责业务逻辑的实现,并且在“模型层”与数据库之间实现了一个“数据交互层”,不再让每个模型层模块与数据库进行交互。

视图层由Struts2负责,使用JSP、HTML和Java Script语言进行交互。Struts2 处理所有用户的请求,然后把请求转发给Ac-tion代理并根据处理后的结果找到相应的视图资源,再把响应发送到客户端浏览器。

控制层使用Spring作为主控制器,负责把请求发送到不同的业务逻辑模块,并根据逻辑需要返回相应的视图层页面。使用XML配置文件,建立前台请求与控制层之间的映射。

模型层主要由Hibernate负责。它主要负责协调软件与数据的交互,提供管理持久化数据的完整方案,让开发者能够专注于业务逻辑的开发。

通过配置文件来管理,避免了更换数据库连接信息时对类文件的修改。数据交互层根据显示层提交的对象,首先对提交的数据进行封装,通过Spring配置来查找相应的数据库表对应的Hibernate。综上所述,Hibernate和Spring控制器的结合可以更加灵活的对数据集的操作进行自定义和封装,而且数据库的连接信息通过相关的配。

2 FTP大文件上传的设计与实现

2.1 JAVA FTP客户端库的选择

目前,已经有很多公开免费的FTP客户端类库,如sim-pleftp、J-ftp, ftpclient等。在本文中,采用是sun.net.ftp.Ftp Cli-ent.。这个是个开源的且功能十分强大的客户端FTP类库。该类库主要提供了用于建立FTP连接的类。利用这些类的方法,编程人员可以远程登录到FTP服务器,列举该服务器上的目录,设置传输协议,以及上传下载文件等。sun.net.ftp.Ftp Client.类涵盖了几乎所有FTP的功能,Ftp Client的实例变量保存了有关建立"代理"的各种信息。

2.2 登录FTP服务器

在开发一个Java Web应用过程中,选定了客户端类库之后,需要开发一个服务使用FTP功能连接到FTP服务器。Inet-Socket Address是Socket Address的实现子类。此类实现IP套接字地址(IP地址+ 端口号),不依赖任何协议。在使用Socket来连接服务器时最简单的方式就是直接使用IP和端口,但Socket类中的connect方法并未提供这种方式,而是使用Socket Ad-dress类来向connect方法传递服务器的IP和端口。Socket Ad-dress只是个抽象类,它除了有一个默认的构造方法外,其它的方法都是abstract的,因此,我们必须使用Socket Address的子类来建立Socket Address对象,也就是唯一的子类Inet Socket Ad-dress。连接FTP的代码片段如下:

2.3 上传文件到FTP服务器

在上传文件过程中,首先需要到服务器的相关目录查看是否存相应目录,如果不存在则创建新目录,然后借助Telnet In-put Stream把该文件传送到本地。is Dir Exist(String file Path)函数是判断服务器是否存在相应目录,create Dir(String file Path)函数是创建新目录,然后通过change Directory(String file Path)函数把远程系统上的目录切换到参数file Path所指定的目录。将远程文件加入输出流中,获取本地文件的输入流,然后接下来就是简单的IO处理。值得注意的是最后应该坚持“谁打开的谁负责关闭”的原则,需要将输入输出流关闭,JAVA不比其它语言JVM启动就注定了它最大占用的内存大小,多个这种不能释放的流最终只能导致整个程序崩溃,如果是一个需要长期使用或者用户流访问量特别大的程序就这么一个流,那就是一个灾难。上传文件的代码片段如下:

2.4 关闭FTP连接

文件上传完成之后,就需要关闭相关的FTP连接,避免资源一直被占用,关闭之前需要通过is Connected()方法判断连接是否有效。关闭FTP的代码片段如下:

到这里为止,完成了向FTP服务器上传文件的功能。sun.net.ftp.Ftp Client可以帮助我们进行一些简单的ftp客户端功能:下载、上传文件。 但如遇到创建目录之类的就无能为力了,这种情况我们只能利用第三方源码。

3 结束语

基于插件的文件网络上传实现 篇7

在开发网络应用系统的时候经常会用到上传文件的应用,比如一个图片文件后上传到服务器,并在数据库中指明访问路径等等。原先大家都是去找一些ASP的上传组件来用,现在用Dreamweaver的上传插件,不用研究代码也可以做出上传功能了,而且也可以上传以中文命名的文件了,非常方便。

2 利用XP_PureUpload插件进行上传

这个插件主要功能是可以对上传对象进行指定文件类型、文件大小和上传到指定目录;可以对重复文件进行多重操作选择;可以使用五个文件域同时上传文件,不过数据库中只可写入其中一个文件名;制作需要2个文件分别为:index.asp获得数据库内容链接上传的文件,upload.asp上传指定的文件。

2.1 数据库表设计与连接

数据表名称为“upload”;字段设置如表1所示。

单击应用程序下面数据库的自定义连接字符串,输入"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("/database/db1.mdb")进行数据库连接。

2.2 上传页面的制作

1)插入表单及元素,在页面内插入表单、一个文本框、一个文件选择域分别命名为“txt”和“filename”。

2)用“插入记录”服务器行为

使用“插入记录”服务器行为插入记录(如图1所示),连接:“conn”;插入到表格:“upload”;插入后转到:“index.asp”;获取值自表单:“form1”;表单元素:因为文本框名为“txt”和数据库中的字段名“txt”相同,所以这里会自动匹配,而文件选择域“filename”则可以手动选择下方“列”字段名中的“filename”字段进行匹配;完成后先不要进行测试操作,我们需要立即进行上传插件的应用。

3)添加插件

在“服务器行为”视窗中选择“XP_Pure ASP File Upload”插件应用(如图2所示),在弹出的对话框中进行如下设置:上传目录:我们选择先前建立的“file”文件夹,如果不填写则表示将文件上传到当前文件夹,也就是upload.asp所在的文件夹;文件类型:我们选择了可以上传所有类型的文件,你可以根据需要定义只允许某些类型文件才可上传,类型之间用“,”分隔;文件名称:可以选择在数据库中保存文件名或者连同选择的访问路径一同保存,我们先选择只保存文件名;冲突处理:如果要上传的文件名已经存在你可以选择覆盖、提醒或者出错等处理方式,我们使用直接覆盖的方式;上传文件大小限制:可以指定上传文件的最大值,这里我们则限制在5兆之内;取文件表单:指定数据从那个表单获得,当前页面上只有一个表单所以不能选择只能是“form1”;

设置完前面的项目后还要注意下方的上传之后转向页,如果你在页面使用插入记录行为后这里就不能填写,因为上传文件代码会加入在插入记录代码之前执行,要是在此设置了转向页那么你的插入记录行为就会失败。

2.4 index.asp页面制作

1)建立记录集“recorset1”,以编号字段倒序排列。

2)插入表格,注上说明文字,将动态数据绑定到表格;然后选择动态数据所在表格使用重复区域服务器行为。

3)考虑将上传的文件存放在某个文件夹中,所以在站点根目录下建立“file”文件夹,然后在文件名称动态数据上做链接指向上传的文件。选择文件名称的动态数据{Recordset1.up_txt}后点击属性面板上的“链接”文件夹图标后会弹出“选择文件”选取文件对话框,点击“选取文件名”项目中的“数据源”,表示链接从数据源来获得。然后在“域”中展开之前建立的“Recordset1”记录集,选择其中的“up_filename”字段,这时在对话框下方的“URL”地址栏中会显示该字段的代码,我们所要链接的文件在file文件夹中,所以在代码前加上“file/”;操作确定后,文件说明的动态数据就已经绑定了动态链接,将文件存盘。

3 利用织梦eDreamer_ImgUpload上传图片

织梦eDreamer_ImgUpload插件是专门用来制作图片上传的插件,它不用编写上传代码,直接可视化制作基于asp的图片上传系统,下面主要介绍这个插件的使用。在使用这个插件之前先来了解一下这个插件:1)可以对上传图片进行指定图片文件尺寸大小、文件大小和上传到指定目录。2)可以对重复文件进行多重操作选择;

制作:需要文件upload.asp上传指定的文件。

1)下载eDreamer_ImgUpload.mxp插件,进行安装。

3)制作upload.asp页面,在页面内插入一个表单form1。

3)选择服务器行为下面“织梦平台”的“图片上传系统”,弹出设置对话框(如图3所示)。

在弹出的对话框中进行设置,图片上传路径:选择先前建立的“file”文件夹,如果不填写则表示将文件上传到当前文件夹,也就是upload.asp所在的文件夹;上传(档案)大小限制:可以指定上传文件的最大值,这里我们则限制在5000KB之内;取文件表单:指定数据从那个表单获得,当前页面上只有一个表单所以不能选择只能是“form1”;图片的宽度限制和图片高度限制:可以限制图片的尺寸大小,注意这儿尺寸大小的单位为像素,如果不添写,是不限制尺寸大小的,这样就可以上传图片了。

4 结束语

利用Dreamweaver 8开发动态平台和网页经常用到文件上传功能,如果利用手工编写代码,需要花费很多精力,然而利用这些上传插件可以轻松实现各种文件的上传,另为可以对这些插件进行各种功能的扩展,有利于用户需要。

参考文献

[1]龙马工作室.Dreamweaver MX ASP网页编程入门与范例制作[M].北京:机械工业出版社,2004.

[2]刘蓉.dreamweaver MX中实现限制用户输入错误密码的次数[J].电脑知识与技术,2004(1):35.

大文件上传 篇8

1 实现文件上传功能需要使用的对象

1.1 使用multipart/form-data格式上传文件

在进行Web信息系统开发时, 需要上传文件到服务器功能。Multipart/form-data格式是一种常用的文件上载方式。通常的使用环境是:在类似于向E-mail后添加附件, 添加方式通常为向表单中浏览并添加附件, 即用multipart/form-data格式使用HTML表单方式上传到服务器。

1.2 Form File对象的使用

Form File对象是Struts框架的一个interface, 而且org apache.struts.upload包是使用的commons-fileupload-1.0进行封装。因此在开发过程中, 必须是将Form File对象在被实例化以后才能完成上传功能的编写。需要注意的是:用Form File完成上传, 还具有一个优点, 那就是若在文件上传过程中出现了异常, 可以自动在Upload Action类获取异常, 并且能够清楚的显示在上传过程中问题出现的问题。而且可以通过对核心配置文件的设定文件的最大值, 或者磁盘大小不足的情况立即中断文件上传。

1.3 File Output Stream对象

文件输出流对象是用于将数据写入File或File Descriptor的输出流。文件是否可用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个File Output Stream (或其他文件写入对象) 打开文件进行写入。在这种情况下, 如果所涉及的文件已经打开, 则此类中的构造方法将失败。

2 实现上传功能的过程

2.1 页面的配置

(1) Jsp页面的开发, 代码如下:

(2) 定义Action Form类, 在类中使用Form File对象实例化对象待上传文件。使用中央控制器调用Upload Action类, 完成业务逻辑的处理。业务逻辑中实体类实现的方法是:中调用Form File类取得上传文件相关信息, 分别赋值, 最后采用流输出File Output Stream对象, 完成上传。

(3) 在核心配置文件strusts-config.xml中使用<controller/>标签配置上传参数, 如:<controller max File Size="20M"/>, 限制上传文件大小最大不超过20M。

2.2 空字段测试

若在使用时, 用户在表单中未输入任何数据, 但却点击了上传按钮。这就出现了在提交的HTML表单中缺少输入域这种情况, 也就是javascript脚本接收到的值为恐, 正则表达式接收到的值为null。当出现这种情况时, 系统自动根据异常的设定显示结果, 或者页面无显示。

当系统检测到上传到服务器的文件字节数为零时, 会依据显示情况去推断文件为上传成功或文件路径显示不正确, 通常这种情况下, Java语言会根据异常处理结果抛出异常thr ow new File Not Found Exception () , 这时, 通常不必刻意在写错误处理代码, 系统会根据上传文件的常规方法将信息报告给服务器及用户。否则 (即文件字节数不为零) , 则说明待上传文件文件上传成功。

3 测试Struts的国际化

国际化是商务软件中不能缺少的部分, 不同国家的用户需要看到他们熟悉的语言文字提示的系统和软件, 就是要求软件及系统具有国际化的功能。

4 系统编码测试

完成系统的编码、并确认正确。使用Eclipse中的调试功能, 分析程序运行结果, 结果符合预期要求, 即用户能够进行文件上传, 并存放在指定目录, 用户端提示正确。程序运行成功, 功能实现。

摘要:使用Struts框架进行web信息系统设计时, 常常需要开发文件上传功能。Struts框架结合Jsp页面开发的特点, 分析了各种文件上传功能实现的方法, 介绍了一种使用Form File对象和File Output Stream对象功能完成上传功能开发的模式, 并列举了部分异常处理的方法。经测试, 功能完备, 可靠性强。

大文件上传 篇9

高校图书馆一般都有信息储备量大和资源更新速度快的特点。除了购买大量资源外,自建数据资源也同样重要,而且必不可少,自建数据资源需要做到能随时随地上传各种类型的文件并及时共享。为了安全和方便,文件最好以数据库的形式保存。在上传文件的过程中,经常会有同时上传多个不同格式文件的需要。这就需要一种多文件同步上传数据库的技术。

1 文件上传技术

传统的文件上传大多采用FTP或HTTP方法,FTP本质上是异步的,需借助客户端程序,而且可编程性较差。HTTP方法无需账号及权限管理,具有不受防火墙限制、更为灵活、方便进行数据库操作等优点,而且ASP技术开发是基于HTTP协议的,HTTP上传可产生许多可访问的附加信息,具有可编程性,使得HTTP上传比FTP有明显的优势。

长期以来,由于File System Object的局限,文件上传成为ASP的一大难题,虽然可以使用第三方上传组件,但组件需要注册,存在安全和兼容问题。另外,这些组件大部分不是免费的,也不是开放源码的软件,无法根据需要进行修改、定制。因此,使用ASP实现无组件上传就显得更为灵活,它可以将所有需要的功能都在Web应用程序中实现,不必在服务器中进行设置。

利用ASP无组件上传技术在同时上传多个文件时,如果处理不好会造成多个文件的上传不能同步完成,使写入数据库中的数据混乱而产生错误,为解决这一点,在算法中将表单数据作为一个完整的数据流读取,通过函数检测分解然后分别写入数据库,避免了逐个处理不同文件而因时间问题存在的同步隐患。

2 Asp无组件上传的实现

不同类型的几个文件同步上传,表单发送的是几个文件的总和,读表单时是作为一个数据流统一接收,这就需要通过函数来判断每个字段的大小、位置来区分不同字段并提取该字段的属性和内容。整个读取、检测数据和写入数据库的过程利用了ASP的几种对象和方法,几个函数以及对数据库编程的SQL语句来实现。其中用Request.Binary Read()方法获取提交的文件数据,用Request.Total Bytes属性读取数据的字节大小。用Request.Binary Read()方法取出字段分隔。用Append Chunk方法将二进制数据追加到Field或Parameter对象。用Get Chunk方法返回二进制数据的内容。

此外,还分别用Mid B()函数、Instr B()函数等搜索字段的开始和结束位置,并确定文件长度,用To Str()取得文件类型,利用Up Load Attrib.Add将取出数据存入对象中。由于是多文件同时上传,接受到的当然是混合在一起的几个不同类型的文件的数据流,因此读取完一个字段后将指针在结束位置+2,指向下一个字段开始处,重复提取下一个字段并写入对象中。

以上过程通过几种ASP的对象、方法以及几个函数的应用,在接收到表单数据流后判断文件开始结束位置、分离和提取不同文件及其属性并将其分别存入对象中,在每个字段结束后通过循环语句进入下一个字段的辨别提取,直到检测到结束位为止。

然后是写入数据库过程。主要通过SQL语句,将前面存入对象中的各个文件的各字段内容分别写入数据库新的元组的不同属性中。至此这次上传的所有文件全部添加到数据库。

3 上传实例

首先是判断、提取、分割字符串:

读取数据总长度

Byte Count=Request.Total Bytes

'定义一个结构,用完之后要用SetUpload=nothing清除

Set Upload=Create Object("Scripting.Dictionary")

用Request.Binary Read()读出全部字符,并搜索开始、结束位置。然后进入循环语句:

Do Until Bin Start=>Form End'如果是结束位则退出

Set Up Load Attrib=Create Object("Scripting Dictionary")'定义一个对象存放参数和值

用Instr B()函数查找各字串位置、搜索字段分隔符,并用Tostr()取出内容

然后确定字段位置并取出其内容:

Binstart=Binbeg+10'跳过"filename="文件名""在第一个引号

Bin End=Instr B(Bin Start,Bin Form,Chr B(34))'搜索"filename="文件名""中最后一个引号

Upload File Name=Lcase(Tostr(Mid B(Bin Form,Bin Start,Bin End-Bin Start)))'取文件名

Binbeg=Instr B(Bin End,Bin Form,To Bin("Content Type:"))+14'搜索"Content-Type:"字串,并跳过它

Bin End=Instr B(Binbeg,Bin Form,Chr B(13))'搜索回车符以确定文件类型串的长度

Up Load Type=To Str(Mid B(Bin Form,Binbeg,Bin End-Binbeg))'取出文件类型串

Binbeg=Bin End+4'跳过"0D 0A 0D 0A"指向表单值的开始位置

Bin End=Instr B(Bin Beg,Bin Form,Form ID)-2'搜索下一个字段开始位置,并后退"0D 0A"两位,以指向表单值结束位置

File Size=Bin End-Bin Beg'求出值的长度

Value=Mid B(Bin Form,Bin Beg,File Size)'取出值

formnum=formnum+1

确定非文件类型表单值的位置:

Bin Beg=Instr B(Bin Start,Bin Form,Chr B(13))+4确定非文件类型表单的值的开始位置

Bin End=Instr B(Bin Beg,Bin Form,Form ID)-2'确定结束位置

File Size=Bin End-Bin Beg'求出值的长度

最后取出数据存入对象中

Up Load Attrib.Add"Size",File Size'将取出数据存入对象中

Up Load Attrib.Add"Value",Value

Up Load Attrib.Add"Type",Upload Type

Up Load Attrib.Add"File Name",Upload File Name

Up Load.Add Form Name,Upload Attrib

set Upload Attrib=nothing

Bin Start=Bin End+2'指向下一个字段开始处

再进入loop循环,重复下一个字段的辨别和提取。数据流检测提取完毕,就是写入数据库了,用SQL语句将保存到对象中的各字段添加到数据库中即可。

图1为同时上传3个不同格式文件的截图,3个文件分别为word文档、jpg图片、mp3语音文件。

4 总结

以上方法通过ASP的几种对象、方法以及几个函数,可以从多个同步上传的文件中分别判断、分离各个文件及其各自的属性,能够同步完成多个不同文件对数据库的写入,不会由于同时有其他对数据库的操作而造成写入混乱,保证了同步上传的多文件能够快速准确地写入数据库中。对于一些非大型的图书馆数据库,需要随时自由上传多个不同格式文件,这种上传技术就具有明显的灵活方便、操作简单可靠的优点,这些在实际的应用中已经得到了充分的证实。

参考文献

[1]段雷,杨兆建.ASPWeb应用程序开发中的数据文件上传与处理[J].机械管理开发,2005,83(2):56-58.

[2]刘尚辉,曹鹏.基于ASP+ACCESS的网络教学资源共享系统[J].电脑与信息技术,2011,19(6):37-41.

上一篇:战略整合论下一篇:趣味教育