论文在Delphi中利用IdFTP组件实现大文件上传

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

在Delphi中利用IdFTP组件实现大文件上传代正军提要:本文利用Delphi和Indy套件中的IdFTP组件,在Delphi下生成ActiveX控件供浏览器客户端上传文件用,上传完毕后客户端发送消息给服务器端,利用服务器端的脚本处理上传后的文件。ThisarticlewillillustratehowtousetheIdFTPcomponentsintheDelphiandIndySuitetogenerateActiveXcontrolsforthebrowserclienttouploadfilesontheplatformofDelphi.Aftertheuploading,theclientsidewillsendmessagestotheserversideandprocessthefilesusingthescriptoftheserverside.关键词:Delphi,IdFtp,ActiveX,大文件上传,ASP.Net背景:在开发资源管理平台的项目中,最核心的问题就是处理文件上传。对于一般的小文件,比如4M以下的文件,可以利用现成的HTML控件可以顺利的解决问题,并且也有比较好的效率。一个相对完整的资源管理平台不仅要解决小文件的上传还应对几百兆甚至千兆的文件提供良好的支持。在现有的ASP.Net技术中,对大文件的上传一直没有比较好的现成的解决方案。目前,基于ASP.Net对大文件的解决方案主要有以下两种:第一种方案:修改web.config文件。在Web.Config配置文件中跟上传文件有直接相关的有两个参数,一个是maxRequestLength:指示ASP.NET支持的最大文件上载大小。该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。指定的大小以KB为单位。默认值为4096KB(4MB);另一个是executionTimeout:指示在被ASP.NET自动关闭前,允许执行请求的最大秒数。单位为秒,在上传大的文件时把这个设的大一些。这种方案最简单,但IIS服务器接收文件时会把所有接收到的数据保存在内存里,等全部数据上传完毕后才写到磁盘上,如果用户上传一个2G的文件,就必须有大于2G的内存空间,如果再考虑到同时有多个用户上传大的文件,这种解决方案显然难以满足要求。同时还没有考虑到慢速网络上传文件的问题,在一个慢速网上上传大文件通常要很长时间,虽然这是极少数的特殊情况,作为一个健全的系统仍然是我们要考虑的问题。因此这种解决方案的效果不大,难以满足要求。第二种方案是无组件上传方案,通常所说的无组件是在浏览器端即客户端不需要安装任何插件,只使用普通的HTML控件FileUpload来实现,而在服务器端进行了大量的处理:利用隐含的HttpWorkerRequest,用它的GetPreloadedEntityBody和ReadEntityBody方法从IIS为ASP.NET建立的pipe里分块读取数据,将处理过的数据即时写入磁盘。这种方案又要比前一种方案好一些,它解决了服务器端收到大文件后即时写入磁盘,有效利用了硬盘空间,并且还支持用户多个文件一起上传。基于这种方案的有良好实现的收费组件,也有网上流传的比较普遍的免费组件。我们也用这种方案实现了文件的上传,经过测试效果仍然不理想,随着文件尺寸的加大,处理效率有所下降,虽然解决了部分的内存使用效率问题,但占用内存依然是可观的,一旦涉及到多用户的并发性,这个方案也无法圆满解决问题。同时在第一个方案中提出的修改配置文件中的两个参数在本方案中依然会涉及,不言而喻它固有的缺陷仍然得不到解决。问题:在处理资源上传的问题上,我们必须要考虑的主要问题有这样一些:1、应该至少支持几百兆的文件上传,尽可能支持1G以上少量用户的并发上传;2、应该允许用户一次性多个文件上传;3、应该支持多个用户同时上传;4、应该支持慢速的网络上传,在上传时间上应该给与用户相对充裕的时间;5、服务器在收到上传完毕的消息后,应及时处理掉用户上传的文件:迁移到指定的存储库里和在数据库中登记相关信息以便于检索。6、容错问题,当然这不是本篇所要讨论的问题,但为了完整性,我们在也此提出来,当用户选定的文件没有正确传完,服务器只收到一部分文件的处理。7、用户在下达上传文件命令时,是在Session的有效时间内下达上传文件的,如果上传的文件需要很长时间(比如通过一个慢速网,或者上传的文件总量很大),而此时该Session允许的时间已经结束,服务器如何判别文件上传完毕及记录相应的信息。等等,需要考虑的问题还有很多,但针对这些主要的问题,我们设想用FTP技术来解决。解决方案:众所周知,基于HTTP的服务主要是用来浏览网页信息的,面对的是相对小的文本文件和小尺寸图片的处理,对于大文件的处理无论是下载还是上传都存在或多或少的问题。在前面的分析中也可以看出HTTP服务没有一个圆满的解决大文件上传的方案。而FTP协议是专门用于处理文件上传的协议,和HTTP协议一样,也是互联网中应用非常广泛和成熟的协议,因此我们借助FTP协议来解决资源管理平台的所涉及到文件上传的问题。在市面上已经有很多的FTP客户端软件都可以用来上传文件,但由于缺乏针对性,灵活性和本项目的整合性因而没有办法使用,因此我们利用Delphi及其Indy套件中的IdFTP客户端控件量身打造上传文件的ActiveX客户端嵌入到我们的网页中实现文件的上传,尽可能使前面提出的问题得以较好的解决。下面是本方案的活动图:在服务器端可以用任何常规的FTP服务器,FTP服务器指定的存储路径必须让我们的资源管理器能存取到文件即可。实现细节:略运行效果图:后记:本方案相对完满解决资源管理平台的文件上传问题,由于采用了FTP技术,文件的上传基本上和HTTP服务脱离开来,只需要文件上传完毕后向HTTP服务器即资源管理平台发送消息即可,资源管理平台即可调用相应的功能进行后续处理。参考文献:1、《Delphi6分布式开发》飞思科技产品研发中心编著,电子工业出版社2、。ASP.net下大文件上传的解决方案及WebbUpload组件源码3、。在ASP.NET中处理大文件上传

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功