当前位置:网站首页 > 技术博客 > 正文

iis ftp 断点续传



公司业务,需要实现一个ftp大文件上传的功能,简单搭建一个ftp服务器,首先研究demo,以及断点上传的功能。

1:首先了解文件上传相关协议,ftp,sftp或者基于http,其他自己实现等。

2:确定基于ftp实现,搭建简单的ftp服务器并用工具确定服务器正常。

3:基于现有的服务器,了解相关ftp开源库,使用代码实现文件上传最基本的功能。

4:考虑到大文件的传输,首先考虑断点续传功能,后期用线程池/多线程方案进行适配优化。

5:考虑使用场景,适配在windows上进行测试,基于qt。

​ sftp基于ssh进行远程传输,基于ssh通道进行数据传输,默认使用22端口。
​ ftp需要单独配置ftp服务器,比如linux上安装vsftpd,windows上安装FileZilla Server,默认使用20/21端口传输
​ 21端口是控制信息端口,20端口一般数据传输端口,可以协商。
​ 主动方式 ftp客户端开放端口给服务器,连接上21端口后,由服务器主动连接开放端口,可能被防火墙阻塞。
​ 被动方式 服务器开放另外的数据端口给客户端,客户端直接连接进行数据传输。

​ 这里我ubuntu环境使用vsftpd进行安装,安装后正常启动,需要关注配置文件中,/etc/vsftpd.conf,下面的配置,否则一直上传有报错。
​ local_enable=YES
​ write_enable=YES
​ 这里我使用xftp连接我的ftp服务器,21端口,使用ftp进行上传(sftp基于ssh,原理不一样),这次测试成功,即基于工具测试ftp服务器成功。

 

因为我比较熟悉linux,首先参考网络,或者libcurl开源库下的example中测试用例,实现最基本的上传文件成功。

这里遇到的问题是,参考网络时,url都是域名,使用自己搭建的ftp时,需要注意url的设置正确,以及这里登陆用户是我自己的账号,根目录也就是/home/用户名,否则会报错。

 

经过了解,libcurl是最好实现该方案的开源库,暂时确定以该库入手实现功能。

5.1 首先获取libcurl开源库源码,编译完成后,了解相关目录架构,参考example目录下相关demo,了解相关基本接口。
5.2 获取libcurl的windows版本,这里直接从官网获取,基于qt进行测试
5.2.1 首先,获取到release版本后,直接解压在对应目录,需要在qt项目中,链接对应的头文件和lib库,使代码编译能通过。
 

同时: 代码实现时能正常调用到libcurl的库,但是运行无反应。

需要把libcurl对应的链接库拷贝到qt 项目debug/release运行目录下,取libcurl release版本目录下bin目录下libcurl.dll。

5.2.2 实现简单的界面,测试服务器连接正常,

在这里插入图片描述

服务器连接测试demo:

 
5.2.3 测试单个文件上传正常
 
5.2.4 如果服务器上已经有该文件,并且上传一半,测试断点续传功能正常。

===》这里我阻塞一段时间,参考example下的resume代码,一直无法实现,最后发现获取服务器上文件名称定义的CURL 实例,需要和真正上传文件时CURL实例

 

1:断点续传一直不生效,发现是设置CURLOPT_NOBODY 和CURLOPT_HEADER 后,就不会触发上传。

===》解决方案是获取服务器上对应文件大小后,先清理对应的CURL * 再进行设置就好

2:模拟断点续传时,手动在linux上把目标文件进行部分内容的删除。

===》断点续传再次触发后,发现和源文件相比,两次上传之间有个换行。

===》解决方案,发现是linux环境手动删除时,自带一个换行符号,把该文件传到window环境上删除换行符后正常。

只是第一版初步的探索demo,技术点已经攻克,下一步优化代码。

版权声明


相关文章:

  • vc2010安装步骤2024-12-24 16:01:03
  • 代码 对比2024-12-24 16:01:03
  • layer获取弹出层2024-12-24 16:01:03
  • pcm格式音频2024-12-24 16:01:03
  • swap函数交换结构体2024-12-24 16:01:03
  • java并发编程实战和并发编程的艺术2024-12-24 16:01:03
  • sql语句编写技巧2024-12-24 16:01:03
  • devc++的使用方法2024-12-24 16:01:03
  • select语句中的where说明2024-12-24 16:01:03
  • ce认证机构28342024-12-24 16:01:03