断点续传断点续传

断点续传  时间: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。

ZJI全新上架香港站群服务器,4C段238个IP月付1400元起

ZJI本月新上线了香港葵湾机房站群服务器,提供4个C段238个IPv4,支持使用8折优惠码,优惠后最低每月1400元起。ZJI是原Wordpress圈知名主机商家:维翔主机,成立于2011年,2018年9月更名为ZJI,提供中国香港、台湾、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册等业务,所选数据中心均为国内普遍访问速度不错的机房。葵湾二型(4C站群)CPU:I...

onevps:新增(支付宝+中文网站),香港/新加坡/日本等9机房,1Gbps带宽,不限流量,仅需$4/月

onevps最新消息,为了更好服务中国区用户:1、网站支付方式新增了支付宝,即将增加微信;原信用卡、PayPal方式不变;(2)可以切换简体中文版网站,在网站顶部右上角找到那个米字旗,下拉可以换中国简体版本。VPS可选机房有:中国(香港)、新加坡、日本(东京)、美国(纽约、洛杉矶)、英国(伦敦)、荷兰(阿姆斯特丹)、瑞士(苏黎世)、德国(法兰克福)、澳大利亚(悉尼)。不管你的客户在亚太区域、美洲区...

日本CN2、香港CTG(150元/月) E5 2650 16G内存 20M CN2带宽 1T硬盘

提速啦简单介绍下提速啦 是成立于2012年的IDC老兵 长期以来是很多入门级IDC用户的必选商家 便宜 稳定 廉价 是你创业分销的不二之选,目前市场上很多的商家都是从提速啦拿货然后去分销的。提速啦最新物理机活动 爆炸便宜的香港CN2物理服务器 和 日本CN2物理服务器香港CTG E5 2650 16G内存 20M CN2带宽 1T硬盘 150元/月日本CN2 E5 2650 16G内存 20M C...

断点续传为你推荐
图像识别算法图像识别算法都有哪些笛卡尔乘积笛卡尔乘积的运算性质blastpncbi blastp怎么设库ucosiiucosii是什么?里面的OS是指什么?在看正点原子给的stm32f407开发指南的时候看到这个,什么意思?wrangleGXG,CK,wrangle,replay哪个牌子档次高?豆瓣fm电台豆瓣和蜻蜓fm电视蚂蚁电视蚂蚁是不是不能用了?我在国外该怎样看奥运?安卓模拟器哪个好用手机模拟器哪个好用?求推荐。高质量图片iphone上有什么高质量的壁纸APP吗最好的视频播放器目前最好的视频播放器是什么?
kvmla 香港机房托管 directadmin 台湾谷歌地址 免费个人空间 idc资讯 昆明蜗牛家 酷番云 微软服务器操作系统 美国独立日 域名dns 架设邮件服务器 备案空间 谷歌搜索打不开 comodo 俄勒冈州 blaze 9929 ftp服务器架设 竞彩论坛空间 更多