数据上传软件论文(精选3篇)
数据上传软件论文 篇1
在日常生活中,人们一直都在和数据信息打交道。数据信息组织和保存的方式很多,最常用的方式就是把数据信息保存在某种文件中,然后将文件上传到FTP服务器[1]。但是当用户要对文件进行操作时,查找文件会显得比较麻烦。本文提出通过数据库直接记录并管理这些文件中的数据信息[2],通过数据库的SQL语句对相关的记录进行增删查改,操作起来非常便捷,而且在数据库中可以采用集群的技术,为用户提供高可靠性的服务。基于Oracle数据库的上传下载软件实现的主要功能是将一些文件写入到数据库,实现文件的上传;然后再将数据库中的内容读出,实现文件的下载。
本文设计不仅实现了文件的上传和下载,还针对一些较大文件的上传提出了一种分块上传的思想。先指定用户想要的文件块的大小,这个值决定了文件要被分割的块数,较大的文件分割成若干块,每块都以一条记录的形式写到数据库中。当某条记录写数据库失败时,只需将那些写数据库失败的文件块重新上传,不需要将整个文件重新上传。采用这种方式可以提高文件上传的效率,节约重新上传时写数据库的时间。但下载时,如果用户需要完整的原始文件,原来属于同一个文件的分块则需要重新写到一个文件中。本文使用边下载、边合并的方法,实现了分块文件的合并下载。用户可以根据自己的需要,针对性地下载其中的部分文件块。读取一个文件分块相比读一个完整的大文件要快很多,文件的分块与合并提高了文件的上传下载效率。值得注意的是,在设置文件分块时,分块的大小要适度,否则会影响软件的运行效率[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.
[6]赵宇峰,张烨.VC存取数据库的BLOB类型的方法[J].微型电脑应用,2007,23(3):59-60.
数据上传软件论文 篇2
在日常的网页应用中,当文件上传操作不涉及太多的上传文件,或者文件类型大多是office、文本文档及普通的图片等,使用传统的网页上传方式是可以的。但是,对于采用B/S架构开发的图文档管理系统,要求能提供上传海量大容量的文档、图片、视频等文件的功能,并且要求上传操作过程安全可靠,速度快,则一般的网页上传方式无法满足该要求。
1 B/S系统常见上传方式对比
综合B/S系统中常用的文件上传方法,根据其实现原理可以归纳为3种类型:传统方式、Flash方式和Activex方式。3种上传方式的特点见表1。
从表1可以看出,传统方式采用html的文件上传标签,即实现方式。这种实现方式不需要任何特定浏览器插件,兼容性最强,但是只能选择单个文件且上传文件容量小;Flash方式需要安装客户端的Flash控件,由于Flash格式在网页中的应用很广泛,兼容性较好,上传文件可以实现多选,但是对上传文件的容量依然存在限制;Activex方式的兼容性最差,只能应用于微软的IE浏览器,同时由于Activex控件的安全性不高,因此很多浏览器都默认禁用Activex控件,使用该方式对文件上传容量没有限制,可以实现多文件和大容量文件上传操作。
以上3种文件上传方式都存在不足之处,若要满足图文档系统上传文件的要求,必须采用其他方式实现。
2 大文件上传原理分析
采用ftp方式可以实现海量文件上传,上传速度快,在安全性和可靠性方面也有保证。但是,ftp软件无法使用网页编程语言实现,只能采用客户端软件安装方式。同时,针对B/S系统架构的特点,上传软件必须与网页的信息进行交互。那么,如何通过网页调用ftp客户端软件并且将必要的网页参数传递给上传软件呢?
上述的问题其实已经得到解决。例如,腾讯官方网站提供了在网页上直接点击就可以调用本机安装的QQ软件来进行对话的例子。通过分析其实现代码可以发现一些关键点。
腾讯官方网站提供的超链接代码:
超链接中的关键内容就在“tencent://message/?uin=88888888&Site=JooIT.com&Menu=yes”这段代码中。这种方式是通过在Windows注册表中注册协议来实现协议与执行程序的关联。例如,腾讯QQ在安装时注册的“tencent://”标识就表示使用了这个标识开头的超链接,浏览器会自动打开本机电脑安装的QQ软件,同时将“tencent://”后面的内容作为参数传递给QQ软件。同样,我们也可以通过在注册表注册自定义的标识,来解决通过网页调用特定客户端软件并传递参数的问题。
同时,我们知道软件代码中main()函数的参数args数组里带了传入软件的参数,因此客户端软件接收网页传递参数的问题也得到了解决。
3 上传软件设计及实现
通过上述原理分析,明确了大文件上传软件的开发思路。设计人员开发了符合B/S架构系统特点,能够与网页进行信息交互的上传软件客户端。该软件的开发环境及运行系统要求如下。
3.1 硬件要求
CPU:单核主频,1G或更高;内存:512M或更高;硬盘:10G或更高。
3.2 软件要求
操作系统:Windows xp、Windows Server 2003、Windows vista、Windows 732或64位版本均可;.net版本:2.0或更高版本;开发工具:Microsoft Visual Studio 2008;开发语言:C#;打包工具:InstallShield 2010。
3.3 软件的主要功能
(1)实现单个或多个文件上传。
(2)能够选择指定文件夹上传其包含的所有子文件夹和文件,并且自动在B/S系统中建立与子文件夹层级一样的子目录。
(3)考虑到服务器和网络的承受能力,可以限制每次上传文件的总容量。
(4)可以自定义上传文件的类型,防止恶意文件破坏服务器系统的安全。
(5)带有上传进度条,上传过程可视化。
3.4 软件使用控件和注册表代码
软件采取C#自带的ftp上传控件FtpWebRequest实现上传功能。采用InstallShield 2010对软件发布打包的时候向注册表注册自定义标识“gxhlupc://”,在网页中调用上传软件时采用类似格式的超链接即可。
摘要:文章根据实际B/S系统中需要大文件上传的需求,提出了一种解决方案并设计了实现上传的软件。该软件可以直接通过网页超链接打开,能接收通过超链接传递的网页参数,可实现多文件上传、文件夹上传及大容量文件上传功能,该软件界面简单、友好,上传速度快,具有良好的安全性和可靠性,满足了B/S系统上传操作的要求。
关键词:大文件上传,文件夹上传,Web B/S系统,.net C# ftp,注册表协议
参考文献
[1]飞思科技产品研发中心.C#编程指南[M].北京:电子工业出版社,2002.
[2]刘晓华,飞思科技产品研发中心..net核心技术原理及架构[M].北京:电子工业出版社,2002.
[3]飞思科技产品研发中心..net核心技术高级特性[M].北京:电子工业出版社,2002.
数据上传软件论文 篇3
在某个B/S系统中通过页面上报用户名、电话等数据,现有一个Excel文件,含有大量用户数据,系统没有提供批量录入的功能,也不能直接上传Excel文件,一条条的录入费时费力,体现不出信息系统的优势。
解决批量录入的方法有两个:一是在系统中增加批量录入功能;二是在客户端利用现有的录入功能实现批量录入。如果系统是自己开发的,则可以用方法一实现,而该B/S系统非自己开发,因此考虑用方法二实现。
用户通过网页和服务器进行交互的过程是通过HTTP协议进行的,因此可以利用Socket编程模拟HTTP会话过程,在程序中重复提交数据的过程就可以实现批量上传。模拟HTTP会话过程的关键是保持会话,即在数据包头部附带相应的Cookie。在登录过程中,服务器会返回一系列的Cookie值,保存这些Cookie值,在提交数据时,需要用到这些Cookie值。
软件采用C#实现,先抓取用户通过网页和服务器交互的所有数据包,分析交互过程中的数据包,将数据包分为两个部分,一是登录过程的数据包,二是上传数据的数据包。然后利用Socket模拟HTTP会话过程:和服务器建立连接,依次发送数据包,接收服务器的响应,依据响应进行相应的处理。下面将介绍具体的实现过程,注意处理好Cookie和用户数据。
2 分析HTTP会话数据包
分析HTTP会话数据包生成两个文件,packets.txt和packets Index.txt(与程序中用到的文件名一致),在程序中作为模拟HTTP会话过程的基本数据。
通过Wireshark抓包软件抓取用户在网页操作过程中的所有数据包,以txt格式存储数据包(packets.txt)。Wireshark抓包的配置如图1所示,在Interface后选择合适的网卡;在Capture Filter中选择HTTP,点击start就可以开始抓包,然后打开登录页面登录服务器,打开上传数据页面,上传数据,操作完毕后停止抓包,将抓到的数据包存为packets.txt。
在Wireshark中可以直接查看数据包中的ASCII字符,每个数据包头部都是ASCII字符,可以根据头部内容确定每个数据包的作用:客户端的请求,获取页面、图片、样式、脚本等;客户端提交数据;服务器端的响应,是否含有Cookie等。在模拟HTTP会话的过程中,可以不考虑实际数据包中的图片、样式、脚本等文件的处理,以提高程序性能。分析剩下的数据包,形成一个索引文件packets Index.txt,将客户端和服务器的每次交互过程(即一次请求响应过程)中的数据包序号、Cookie、服务器响应结束标志等作为一个数据块存储,文件的格式如图2所示。第一行为块编号,从1开始编号;第二行为本次HTTP请求中发送数据包在packets.txt中的序号,多个则以逗号分隔;第三行开始为本次HTTP请求中返回的Cookie,以逗号分隔;第四行是本次接收数据的结束标记;第五行为空行,块结束。
3 编程实现
3.1 定义结构体
首先定义结构体Block State、my Const Struct、my Const,其中Block State对应索引文件中的一个数据块,my Const Struct对应常量处理中用到的数据,my Const将所有常量集中在一起。
3.2 定义类成员
3.3 初始化数据
3.4 登录过程
3.5 批量提交数据
3.6 函数one Block Http
4 结语
用Socket模拟HTTP会话,利用已有的页面提交功能实现了数据的批量提交,该方法具有通用性,在应用到其他需要批量提交的系统时,只需依据具体HTTP会话过程分析生成packets.txt和packets Index.txt两个文件就可以。
摘要:基于B/S系统上传数据的功能,用Socket模拟HTTP会话过程,批量处理上传数据。
关键词:Socket,模拟HTTP会话,批量处理法
参考文献
[1]马骏.C#网络应用编程.人民邮电出版社,2010.
【数据上传软件论文】推荐阅读:
浅谈软件开发需求分析阶段的主要任务_上传07-30
人力资源师论文上传10-07
数据采集软件论文07-22
面向数据的软件工程论文05-30
讲话上传09-29
上传系统维护05-25
大文件上传06-12
勇气上传教案11-17
酉阳串词-上传05-08
评估报告上传百度06-12