断点续传断点续传

断点续传  时间:2021-08-07  阅读:()

断点续传

NMFTP是Delphi、Borland C++ Builder(以下简称BCB)自带的FastNet控件组中的一个组件,主要用于实现FTP上传、下载等功能。

它在开发一些小型、简单的网络应用软件时非常有用。

笔者最近在使用BCB6开发一套FTP客户端软件时需要实现断点上(续)传(以下用"断点续传"特指断点上(续)传),最终通过NMFTP得以实现,在此将问题解决过程写出来,与广大程序员共飨。

一、系统函数假续传  用过NMFTP的朋友都知道,NMFTP有三个上传函数可以满足绝大部分的上传操作。

它们分别是:Upload()、UploadAppend()、UploadRestore()、UploadUnique(),这四个函数的原型为:   procedure Upload(LocalFile, Remote  File: string);   procedure UploadAppend(LocalFile, RemoteFile: string);  procedure UploadRestore(LocalFile, RemoteFile: string; Position: Integer);   procedure UploadUnique(LocalFile: string);  笔者的软件要求在FTP服务器不授予"删除"权限的条件下完成文件传输,且上传的文件要与本地文件同名。

因此断点续传是解决问题的唯一途径。

通过帮助文档可以知道,UploadRestore()、UploadAppend()两个函数都能满足要求,两者唯一不同之处在于前者需要指定断点位置,而后者自动将文件接续在已上传的文件后(服务器上文件名需要与"RemoteFile"参数指定的文件名相同)。

  实际使用过程中,发现两者确实都可以完成续传的目的,但是直接使用这两个函数完成续传以后的文件无法使用,而文件大小是续传前的大小与原文件大小之和,也就是说,这两个函数完成的"续传"是把文件从前次断点处重新从头传了一遍,而并没有真正的从断点处"续传"。

二、通过指令细分析   通过Serv-U的"监视用户"功能,我们可以看到服务器与客户端FTP指令。

  当使用UploadRestore()时,客户端发送指令:"REST ****"(*号为函数中指定的Position参数值),服务器响应为:"350 Restarting at ****. Send STORE or RE   TRIEVE "然后函数开始上传数据。

  当使用UploadAppend()时,客户端发送指令:"APPE ****"(*号为函数中指定的RemoteFile参数值),服务器响应为:"150 Opening BINARY mode data connection for ****."。

  如果我们使用CuteFTP进行续传的话,我们可以看到客户端发送的指令首先为"REST ****"(*号为断点所在位置),待服务器响应后,客户端发送的指令变为"APPE ****"(*号为服务器上的文件名)。

  通过分析以上的指令,我们可以看到,CuteFTP完成续传主要还是调用Append的方法,"REST"指令仅是获得断点位置,但是由于其内部机制控制了续传从断点处开始而不是从文件起始处开始,而UploadRestore()和UploadAppend()并不能控制续传仅从断点处开始,从而导致续传后的文件无法使用。

三、彻底解决问题  通过前面的分析,我们知道了,NMFTP无法实现真正的续传关键在于无法从断点处传送本地文件。

既然如此,我们只要在续传命令前从断点处截取源文件作为临时文件,然后续传这个临时文件即可解决续传问题。

事实证明这个方法是有效的。

  下面以在BCB6中调用UploadAppend()函数完成续传为例给出源代码,读者也可以使用UploadRestore()函数完成。

程序用到的控件见表1,全局变量见表2。

gcorelabs远东khabarovsk伯力Cloud云服务器测评,告诉你gcorelabs云服务器怎么样

说明一下:gcorelabs的俄罗斯远东机房“伯力”既有“Virtual servers”也有“CLOUD SERVICES”,前者是VPS,后者是云服务器,不是一回事;由于平日大家习惯把VPS和云服务器当做一回事儿,所以这里要特别说明一下。本次测评的是gcorelabs的cloud,也就是云服务器。 官方网站:https://gcorelabs.com 支持:数字加密货币、信用卡、PayPal...

RAKsmart 2021新年新增韩国服务器及香港美国日本VPS半价

RAKsmart 商家我们肯定不算陌生,目前主要的营销客户群肯定是我们。于是在去年的时候有新增很多很多的机房,比如也有测试过的日本、香港、美国机房,这不今年有新增韩国机房(记得去年是不是也有增加过)。且如果没有记错的话,之前VPS主机也有一次磁盘故障的问题。 这不今天有看到商家新增韩国服务器产品,当然目前我还不清楚商家韩国服务器的线路和速度情况,后面我搞一台测试机进行...

LOCVPS新上韩国KVM,全场8折,2G内存套餐月付44元起_网络传真服务器

LOCVPS(全球云)发布了新上韩国机房KVM架构主机信息,提供流量和带宽方式,适用全场8折优惠码,优惠码最低2G内存套餐月付仅44元起。这是一家成立较早的国人VPS服务商,目前提供洛杉矶MC、洛杉矶C3、和香港邦联、香港沙田电信、香港大埔、日本东京、日本大阪、新加坡、德国和荷兰等机房VPS主机,基于KVM或者XEN架构。下面分别列出几款韩国机房KVM主机配置信息。韩国KVM流量型套餐:KR-Pl...

断点续传为你推荐
阿里P8互联网职位 p7 p8什么意思?阿里P8阿里P8程序员34岁年薪170万,这在北京而立人群中属于什么收入水平?微指数爱情公寓4唐悠悠让小黑理片子是哪1集bftBFT、什么東西噢、什么意思、解釋下。lazyloadphpwind中门户模式怎么使用lazyload图片加载?免费erp免费ERP靠谱吗?scanf返回值Scanf()函数的使用wizardry霍格沃茨学校在哪里?色温图一张色温准确的照片的基本标准是什么?蓝牙开发Android蓝牙开发代码怎么写?
国外免费vps 企业域名备案 中国万网虚拟主机 免费cdn加速 mobaxterm godaddy优惠券 免费静态空间 免费吧 东莞数据中心 789电视剧 丽萨 阿里云免费邮箱 学生服务器 广东主机托管 asp空间 windows2008 远程主机强迫关闭了一个现有的连接 百度空间登陆首页 深圳摇号申请网站 杭州车牌申请网站 更多