Windows客户端Linux服务端,Linux服务端与windows客户端之间跨平台文件的传输方法与流程...

本发明属于文件传输技术领域,特别涉及一种Linux服务端与windows客户端之间跨平台传输文件的实现方法。

背景技术:

Windows与Linux是目前最流行的两种操作系统。基于Linux运行稳定、功能强大、获取方便等优点因素的考虑,仍是作为很多项目中服务器的优选。

文件传输是操作系统中常见的行为活动,Linux也提供了文件传输的工具,其中包括vsftp服务实现linux端的文件上传下载,并有相关的接口实现。

目前的传输技术存在着如下不足:

(I)现有的vsftp服务虽然提供了文件上传下载指令接口(STOR与RETR),但无法满足与windows客户端间的文件上传与下载。

(II)主要缺失windows客户端一些指令的实现,如MLST指令,导致无法正常通信。

技术实现要素:

本发明的目的,在于提供一种Linux服务端与windows客户端之间跨平台文件的传输方法,其可实现vsftp服务缺失的指令功能,解决linux端vsftp服务与一些常见的windows客户端间的文件通信,以支持windows客户端与linux搭建的服务端间跨平台文件上传下载。

为了达成上述目的,本发明的解决方案是:

一种Linux服务端与windows客户端之间跨平台文件的传输方法,包括如下步骤:

步骤1,将接收到的指令ftp_cmd_str与“MLST”比对,判断vsftp服务是否接收到MLST指令,如果接收到该指令则开始查询文件目录,进入步骤2,否则处理接收到的其它指令的业务,不进入后续步骤;

步骤2,根据接收到的MLST指令,先获得文件/文件夹的路径与文件权限,拼接得到文件/文件夹信息串,转步骤3;

步骤3,根据步骤2得到的返回结果,通过vsftp与客户端发送指令的接口vsf_cmdio_write_char将结果发送到客户端;

步骤4,发送成功后,给客户端发送250End消息,表示MLST动作结束,客户端收到250End消息,进入步骤5;

步骤5,客户端向linux服务器发送STOR或RETR指令,服务器根据指令对文件进行上传或下载操作。

上述步骤2的具体内容是:

步骤21,根据接收到的MLST指令,查询要进行处理的文件/文件夹,若未查询到,则返回权限值PERMISSION_INVALIDNAME,转步骤3;若查询到,则获取其相应的路径,转步骤22;

步骤22,根据当前用户信息和传入的指令,构造函数接口进行判断获取得到文件的权限,如果权限异常则转步骤3,否则转步骤23;

步骤23,拼接获取文件/文件夹信息串。

上述步骤23中,文件/文件夹信息串的形式是:文件类型,文件大小,文件最后修改时间,路径名;步骤23的具体内容是:

步骤231,根据步骤22得到的文件权限值,如果为PERMISSION_FILENOTDIR,得到子串type=file,如果权限为PERMISSION_DIRNOTFILE,则得到子串type=dir;

步骤232,计算获得文件的大小,得到子串size=%I64d,其中%I64d为size值类型;

步骤233,获取文件最后修改的时间,得到子串:

modify=%04d%02d%02d%02d%02d%02d

步骤234,最终整理拼接文件/文件夹信息串,格式为:

文件类型:type=file;size=%I64d;modify=%04d%02d%02d%02d%02d%02d路径名;

文件夹类型:type=dir;size=%I64d;modify=%04d%02d%02d%02d%02d%02d路径名。

上述步骤3的具体内容是:若步骤21返回文件不存在,或步骤22返回文件权限异常,则通过接口将550Permission denied/550Filename invalid/550directory not found发送到客户端,然后中止退出,其中,550Permission denied表示用户无操作权限,550Filename invalid表示无效路径名,550directory not found表示存在其他错误;否则,结合步骤21返回的路径和步骤23返回的文件/文件夹信息串,将“250-Listing+文件/文件夹的路径”拼接通过接口发送给客户端,再将“文件/文件夹信息串”发送到客户端,再转步骤4。

上述步骤5中,服务器操作完成后,向客户端反馈文件操作结果,操作结果包括550表示异常,返回250表示成功。

现有方案只实现vsftp在Linux端的通信实现文件的上传下载,没有考虑到跨平台情况常见的windows客户端间兼容性,采用上述方案后,本发明能够实现这部分缺失,实现vsftp文件目录内容的检索,且支持与常见windows客户端间文件上传下载功能。

附图说明

图1是本发明的流程图。

具体实施方式

以下将结合附图,对本发明的技术方案及有益效果进行详细说明。

如图1所示,本发明提供一种Linux服务端与windows客户端之间跨平台文件的传输方法,主要完成接收到STOR(处理上传)或RETR(处理下载)指令之前的MLST指令处理,列出指定目录内容,通过与客户端间的发送指令接口vsf_cmdio_write或vsf_cmdio_write_char返回结果给客户端;所述传输方法具体包括如下步骤:

步骤1,将接收到的指令ftp_cmd_str与“MLST”比对,判断vsftp服务是否接收到MLST指令,如果接收到该指令则开始查询文件目录,进入步骤2,否则处理接收到的其它指令的业务,不进入后续步骤;

步骤2,根据接收到的MLST指令,先获得文件/文件夹的路径与文件权限,拼接得到文件/文件夹信息串,转步骤3;

具体内容是:

步骤21,根据接收到的MLST指令,查询要进行处理的文件/文件夹,若未查询到,则返回权限值PERMISSION_INVALIDNAME,转步骤3;若查询到,则获取其相应的路径(用于步骤23中拼接信息串),转步骤22;

步骤22,根据当前用户信息和传入的指令,构造函数接口进行判断获取得到文件的权限,如果权限异常(返回值非0)则转步骤31,否则转步骤23;

其中,文件权限包括:

PERMISSION_DENIED(0x01),//根据当前用户信息,判断是否有当前用户权限

PERMISSION_NOTFOUND(0x02),//未找到该文件/文件夹

PERMISSION_DIRNOTFILE(0x04|PERMISSION_DOESALREADYEXIST),//为文件夹

PERMISSION_FILENOTDIR(0x08|PERMISSION_DOESALREADYEXIST),//为文件

PERMISSION_DOESALREADYEXIST(0x10),//该文件/文件夹已经存在

PERMISSION_INVALIDNAME(0x20),//该文件/文件夹名无效

0(正常返回值)。

步骤23,拼接获取文件/文件夹信息串:

文件类型(文件夹或普通文件),文件大小,文件最后修改时间,路径名。其中最后修改时间与文件名之间用空格分割。

具体内容是:

步骤231,根据步骤22得到的文件权限值,如果为PERMISSION_FILENOTDIR,得到子串type=file,如果权限为PERMISSION_DIRNOTFILE,则得到子串type=dir;

步骤232,计算获得文件的大小,得到子串size=%I64d,其中%I64d为size值类型;

步骤233,获取文件最后修改的时间,得到子串:

modify=%04d%02d%02d%02d%02d%02d

步骤234,最终整理拼接文件/文件夹信息串,格式如:

文件类型:type=file;size=%I64d;modify=%04d%02d%02d%02d%02d%02d路径名;

文件夹类型:type=dir;size=%I64d;modify=%04d%02d%02d%02d%02d%02d路径名;

步骤3,根据步骤2中得到的返回结果,此处返回结果包括步骤22返回的权限和步骤23返回的文件/文件夹信息串,通过vsftp与客户端发送指令的接口vsf_cmdio_write_char将结果发送到客户端;

具体包括如下两种情况:

若文件不存在或文件权限异常,则通过接口将550Permission denied/550Filename invalid/550directory not found发送到客户端,然后中止退出。其中,550Permission denied表示用户无操作权限,550Filename invalid表示无效路径名,550directory not found表示存在其他错误。

如果文件权限正常(正常返回0),将“250-Listing+文件/文件夹的路径”拼接通过接口发送给客户端,再将“文件/文件夹信息串”发送到客户端,再转步骤4;

步骤4,上述结果发送成功,给客户端发送250End消息,表示MLST动作结束,客户端会收到250End消息,进入步骤5;

步骤5,客户端根据需要,向linux服务器(vsftpd服务)发送STOR或RETR指令,服务器接收到STOR(接收数据并且在服务器站点保存为文件)或RETR(传输文件副本)指令,对文件进行上传或下载操作。向客户端反馈文件操作结果,操作结果包括550表示异常,返回250表示成功。流程结束。

以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值