断点续传断点续传

断点续传  时间: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:美国GPU服务器,8张RTX2080Ti,2*Silver-4214/256G内存/1T SSD/

gcorelabs提供美国阿什本数据中心的GPU服务器(显卡服务器),默认给8路RTX2080Ti,服务器网卡支持2*10Gbps(ANX),CPU为双路Silver-4214(24核48线程),256G内存,1Gbps独享带宽仅需150欧元、10bps带宽仅需600欧元,不限流量随便跑吧。 官方网站 :https://gcorelabs.com/hosting/dedicated/gpu/ ...

HyperVMart:加拿大vps,2核/3G/25G NVMe/G口不限流量/季付$10.97,免费Windows系统

hypervmart怎么样?hypervmart是一家成立了很多年的英国主机商家,上一次分享他家还是在2年前,商家销售虚拟主机、独立服务器和VPS,VPS采用Hyper-V虚拟架构,这一点从他家的域名上也可以看出来。目前商家针对VPS有一个75折的优惠,而且VPS显示的地区为加拿大,但是商家提供的测速地址为荷兰和英国,他家的优势就是给到G口不限流量,硬盘为NVMe固态硬盘,这个配置用来跑跑数据非常...

2021年全新Vultr VPS主机开通云服务器和选择机房教程(附IP不通问题)

昨天有分享到"2021年Vultr新用户福利注册账户赠送50美元"文章,居然还有网友曾经没有注册过他家的账户,薅过他们家的羊毛。通过一阵折腾居然能注册到账户,但是对于如何开通云服务器稍微有点不对劲,对于新人来说确实有点疑惑。因为Vultr采用的是预付费充值方式,会在每月的一号扣费,当然我们账户需要存留余额或者我们采用自动扣费支付模式。把笔记中以前的文章推送给网友查看,他居然告诉我界面不同,看的不对...

断点续传为你推荐
ripper名侦探柯南中JT Ripper 是啥意思?apple以旧换新苹果手机以旧换新划算吗?app退款苹果app能不能退款密码设置怎么给电脑设置密码?rs485协议RS232/RS485串行通信协议的解释qsv视频格式转换器简单好用的qsv格式转换器有哪些?赵锡成众生有罪,你我皆同谋。什么意思碰撞球碰撞分为哪几种,分别解释一下传奇私服教程传奇私服怎么开服教程spinmaster那个街球队 叫什么And1的 球队和球员介绍
网站服务器租用 域名系统 漂亮qq空间 全球付 edis 外国服务器 512av 免费名片模板 服务器cpu性能排行 日本bb瘦 200g硬盘 速度云 共享主机 根服务器 美国独立日 测试网速命令 阿里云邮箱个人版 google搜索打不开 免费赚q币 美国服务器 更多