远程文件传输方法、装置、设备及存储介质与流程

文档序号:29942898发布日期:2022-05-07 15:08阅读:127来源:国知局
远程文件传输方法、装置、设备及存储介质与流程

1.本发明涉及计算机技术领域,尤其涉及一种远程文件传输方法、装置、设备及存储介质。


背景技术:

2.目前附件存储方式有两种,第一种方式为存储在应用所在服务器的本地硬盘上,第二种方式为使用http协议放到远程服务器上。其中第一种方式中需要定期进行磁盘扩容防止磁盘满了后无法继续写入,这种方案需要先将服务器关机,会造成服务器停机的问题。第二种方式中由于使用http协议传输文件时,会额外在服务器上新开一个随机端口,程序在处理一个请求时会占用2个端口,会使能够处理的并发请求理论值降低一倍。
3.上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。


技术实现要素:

4.本发明的主要目的在于提供一种远程文件传输方法、装置、设备及存储介质,旨在解决现有使用http协议传输文件时使程序所在服务器能处理的并发请求数降低的技术问题。
5.为实现上述目的,本发明提供了一种远程文件传输方法,所述方法包括以下步骤:
6.与目标文件存储服务器创建套接字连接;
7.读取待发送文件的二进制流,存储至预设内存中;
8.从所述预设内存中获取文件字节流,根据预设文件存储协议将所述文件字节流转换为待传输数据;
9.通过所述套接字连接将所述待传输数据发送至所述目标文件存储服务器。
10.可选地,所述从所述预设内存中获取文件字节流,根据预设文件存储协议将所述文件字节流转换为待传输数据,包括:
11.从所述预设内存中获取文件字节流,确定所述文件字节流对应的数据长度;
12.按照预设转换策略将所述数据长度转换为长度字符串;
13.根据预设文件存储协议将预设行为码、所述长度字符串以及所述文件字节流进行拼接,得到待传输数据。
14.可选地,所述按照预设转换策略将所述数据长度转换为长度字符串,包括:
15.对所述数据长度进行进制转换,得到当前字符串;
16.根据预设字节数对所述当前字符串进行标准化处理,得到长度字符串,所述长度字符串的字节数与所述预设字节数一致。
17.可选地,所述与目标文件存储服务器创建套接字连接之后,所述方法还包括:
18.获取返回的异常信息;
19.在检测到所述异常信息不为空时,发出连接异常的提示信息。
20.可选地,所述读取待发送文件的二进制流,存储至预设内存中之前,所述方法还包括:
21.获取预设文件路径;
22.判断所述预设文件路径下是否存在待发送文件;
23.若存在,则执行读取待发送文件的二进制流,存储至预设内存中的步骤;
24.若不存在,则发出错误提示信息。
25.可选地,所述方法还包括:
26.获取包括多个远程传输任务的远程传输任务清单;
27.根据所述远程传输任务清单的顺序依次确定目标远程传输任务;
28.与所述目标远程传输任务对应的文件存储服务器创建目标套接字连接;
29.获取所述目标远程传输任务对应的目标待发送文件;
30.读取所述目标待发送文件的二进制流,存储至对应的目标预设内存中;
31.从所述目标预设内存中获取目标文件字节流,根据预设文件存储协议将所述目标文件字节流转换为目标待传输数据;
32.通过所述目标套接字连接将所述目标待传输数据发送至所述目标远程传输任务对应的文件存储服务器。
33.可选地,所述与所述目标远程传输任务对应的文件存储服务器创建目标套接字连接之前,所述方法还包括:
34.获取当前连接列表,并根据所述当前连接列表确定已连接设备信息;
35.确定所述目标远程传输任务对应的对端设备信息;
36.在所述已连接设备信息中不包含所述对端设备信息时,执行所述与所述目标远程传输任务对应的文件存储服务器创建目标套接字连接的步骤。
37.此外,为实现上述目的,本发明还提出一种远程文件传输装置,所述远程文件传输装置包括:
38.连接模块,用于与目标文件存储服务器创建套接字连接;
39.读取模块,用于读取待发送文件的二进制流,存储至预设内存中;
40.转换模块,用于从所述预设内存中获取文件字节流,根据预设文件存储协议将所述文件字节流转换为待传输数据;
41.发送模块,用于通过所述套接字连接将所述待传输数据发送至所述目标文件存储服务器。
42.此外,为实现上述目的,本发明还提出一种远程文件传输设备,所述远程文件传输设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的远程文件传输程序,所述远程文件传输程序配置为实现如上文所述的远程文件传输方法。
43.此外,为实现上述目的,本发明还提出一种存储介质,所述存储介质上存储有远程文件传输程序,所述远程文件传输程序被处理器执行时实现如上文所述的远程文件传输方法。
44.本发明通过与目标文件存储服务器创建套接字连接;通过套接字连接读取待发送文件的二进制流,存储至预设内存中;从预设内存中获取文件字节流,根据预设文件存储协议将文件字节流转换为待传输数据;将待传输数据发送至目标文件存储服务器。通过上述
方式,利用套接字使用预设文件存储协议进行远程文件传输,在程序所在服务器上只会固定占用一个端口,对能够处理的并发请求量理论值几乎没有影响。
附图说明
45.图1是本发明实施例方案涉及的硬件运行环境的远程文件传输设备的结构示意图;
46.图2为本发明远程文件传输方法第一实施例的流程示意图;
47.图3为本发明远程文件传输方法第二实施例的流程示意图;
48.图4为本发明远程文件传输装置第一实施例的结构框图。
49.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
50.应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
51.参照图1,图1为本发明实施例方案涉及的硬件运行环境的远程文件传输设备结构示意图。
52.如图1所示,该远程文件传输设备可以包括:处理器1001,例如中央处理器(central processing unit,cpu),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(wireless-fidelity,wi-fi)接口)。存储器1005可以是高速的随机存取存储器(random access memory,ram),也可以是稳定的非易失性存储器(non-volatile memory,nvm),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
53.本领域技术人员可以理解,图1中示出的结构并不构成对远程文件传输设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
54.如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及远程文件传输程序。
55.在图1所示的远程文件传输设备中,网络接口1004主要用于与网络服务器进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明远程文件传输设备中的处理器1001、存储器1005可以设置在远程文件传输设备中,所述远程文件传输设备通过处理器1001调用存储器1005中存储的远程文件传输程序,并执行本发明实施例提供的远程文件传输方法。
56.本发明实施例提供了一种远程文件传输方法,参照图2,图2为本发明远程文件传输方法第一实施例的流程示意图。
57.本实施例中,所述远程文件传输方法包括以下步骤:
58.步骤s10:与目标文件存储服务器创建套接字连接。
59.可以理解的是,本实施例的执行主体为远程文件传输设备,所述远程文件传输设备可以为程序运行所在的计算机、服务器等设备,还可以为其他具备相同或相似功能的设备,本实施例以程序运行所在的服务器为例进行说明。
60.需要说明的是,本实施例中利用golang创建套接字连接(socket),在具体实现中,使用net.dial("tcp","服务端地址")进行socket连接,此函数会返回连接对象句柄和异常信息两个返回值,如果异常信息为空并返回连接对象句柄,则表征正常连接上目标文件存储服务器。
61.进一步地,所述步骤s10之后,所述方法还包括:获取返回的异常信息;在检测到所述异常信息不为空时,发出连接异常的提示信息。
62.应当理解的是,在异常信息不为空时,说明连接异常发生,具体代码示例如下:
[0063][0064]
步骤s20:读取待发送文件的二进制流,存储至预设内存中。
[0065]
需要说明的是,通过socket发送的均为二进制流,本实施例中提前将文件的二进制流读取至内存中,预设内存为提前设置的用于存储二进制流的内存区域。
[0066]
进一步地,所述步骤s20之前,所述方法还包括:获取预设文件路径;判断所述预设文件路径下是否存在待发送文件;若存在,则执行步骤s20;若不存在,则发出错误提示信息。
[0067]
可以理解的是,读取文件的二进制流使用golang中的ioutil.readfile("文件路径")进行读取。在使用此函数之前需判断文件是否存在,如不存在,则抛出错误信息并终止后续步骤。此函数会返回读取出来的二进制数组和异常信息两个返回值,当没有异常信息时,则为正常读取成功。具体代码示例如下:
[0068][0069]
步骤s30:从所述预设内存中获取文件字节流,根据预设文件存储协议将所述文件
字节流转换为待传输数据。
[0070]
需要说明的是,预设文件存储协议为提前设置的文件传输转换规则,将文件对应的二进制字节流按照本实施例的预设文件存储协议进行传输,既增加了文件传输的私密性,又为对端设备提供了文件相关信息,使得对端服务器根据接收到的数据执行对应的存储操作。
[0071]
具体地,所述步骤s30,包括:从所述预设内存中获取文件字节流,确定所述文件字节流对应的数据长度;按照预设转换策略将所述数据长度转换为长度字符串;根据预设文件存储协议将预设行为码、所述长度字符串以及所述文件字节流进行拼接,得到待传输数据。
[0072]
可以理解的是,本实施例采用一套自定义协议作为socket文件存储协议,使用一个字节流进行传输,其中包括指令、数据长度、需要处理的数据等,以约定的二进制字节位数作为协议分割,具体地,前1个字节表示预设行为码,以0x02表示附件存储指令,当服务端接收到此指令后,将以附件存储处理发送的字节流。定义为action_code:=[]byte{0x02};1-11位字节表示文件流的大小,定义为hex_bytes;按照协议约定拼接字节流,将行为码、数据长度、文件二进制字节流拼装成一个字节流。
[0073]
在具体实现中,由于行为码为一个字节,数据长度为一个长度为10的字节数组,读取文件二进制字节流也是一个字节数组,故将这些按照协议约定的位数进行拼装,则可以得到一个完整的协议字节流。例如,使用append函数进行数组拼装。
[0074]
进一步地,所述按照预设转换策略将所述数据长度转换为长度字符串,包括:对所述数据长度进行进制转换,得到当前字符串;根据预设字节数对所述当前字符串进行标准化处理,得到长度字符串,所述长度字符串的字节数与所述预设字节数一致。
[0075]
需要说明的是,数据长度为十进制,可选地,对所述数据长度进行进制转换,得到当前字符串,包括:将所述数据长度转换为十六进制字符,得到当前字符串。标准化处理为将当前字符串转换为预设长度的字符,具体地,采用在前补0的方式进行标准化处理。例如文件总长为100byte,则将100转为十六进制,转换后如未达到10位字节,则在前面进行补0,100转换后则为0x0000000064。读取文件字节流后,获取字节流的长度,将此长度以上述方法转为十六进制,得到一个十位长度,以十六进制记录长度的字符串,定义此数组为hex_bytes。
[0076]
步骤s40:通过所述套接字连接将所述待传输数据发送至所述目标文件存储服务器。
[0077]
可以理解的是,待传输数据包含存储指令、文件字节长度和文件的二进制流等。使用步骤s10中所获取到的连接句柄进行数据发送。例如conn.write(protocol_buffer)。
[0078]
本实施例通过与目标文件存储服务器创建套接字连接;通过套接字连接读取待发送文件的二进制流,存储至预设内存中;从预设内存中获取文件字节流,根据预设文件存储协议将文件字节流转换为待传输数据;将待传输数据发送至目标文件存储服务器。通过上述方式,利用套接字使用预设文件存储协议进行远程文件传输,在程序所在服务器上只会固定占用一个端口,对能够处理的并发请求量理论值几乎没有影响。
[0079]
参考图3,图3为本发明远程文件传输方法第二实施例的流程示意图。
[0080]
基于上述第一实施例,本实施例远程文件传输方法还包括:
[0081]
步骤s01:获取包括多个远程传输任务的远程传输任务清单。
[0082]
可以理解的是,各个远程传输任务包括连接对象信息以及文件存储位置,远程传输任务清单可以为根据多个远程传输任务的任务序号、连接对象信息以及文件存储位置构建的映射表格。
[0083]
步骤s02:根据所述远程传输任务清单的顺序依次确定目标远程传输任务。
[0084]
步骤s03:与所述目标远程传输任务对应的文件存储服务器创建目标套接字连接。
[0085]
需要说明的是,根据目标远程传输任务的连接对象信息通过net.dial("tcp","服务端地址")进行socket连接。
[0086]
步骤s04:获取所述目标远程传输任务对应的目标待发送文件。
[0087]
可以理解的是,根据目标远程传输任务的文件存储位置获取对应的目标待发送文件,在步骤s04之前,还包括:获取目标远程传输任务对应的文件存储位置;判断所述文件存储位置是否存在目标待发送文件;若存在,则执行步骤s04;若不存在,则发出错误提示信息。
[0088]
步骤s05:读取所述目标待发送文件的二进制流,存储至对应的目标预设内存中。
[0089]
步骤s06:从所述目标预设内存中获取目标文件字节流,根据预设文件存储协议将所述目标文件字节流转换为目标待传输数据。
[0090]
步骤s07:通过所述目标套接字连接将所述目标待传输数据发送至所述目标远程传输任务对应的文件存储服务器。
[0091]
需要说明的是,依次执行远程传输任务清单上的多个远程传输任务,实现批量处理远程传输任务的流程,进一步提高远程传输效率。
[0092]
进一步地,所述步骤s03之前,所述方法还包括:获取当前连接列表,并根据所述当前连接列表确定已连接设备信息;确定所述目标远程传输任务对应的对端设备信息;在所述已连接设备信息中不包含所述对端设备信息时,执行所述步骤s03。
[0093]
需要说明的是,为了避免对程序所在服务器的端口造成占用,本实施例中与同一台文件存储服务器只建立一个套接字连接。在具体实现中,在与a文件存储服务器创建套接字连接后,将a文件存储服务器对应的信息存储于连接列表中,按照远程传输任务清单的顺序依次与任务对应的文件存储服务器建立连接,如果多个任务对应的文件存储服务器相同,则只需建立一次,后续可直接通过已连接的套接字向对端文件存储服务器传输数据。进一步地,在所述已连接设备信息中包含所述对端设备信息时,执行所述步骤s04,相应地,所述步骤s06之后,包括:确定目标远程传输任务对应的已构建套接字连接,通过该已构建套接字连接将目标待传输数据发送至目标远程传输任务对应的文件存储服务器。
[0094]
本实施例通过获取包括多个远程传输任务的远程传输任务清单;根据远程传输任务清单的顺序依次确定目标远程传输任务;与目标远程传输任务对应的文件存储服务器创建目标套接字连接;获取目标远程传输任务对应的目标待发送文件;通过目标套接字连接读取目标待发送文件的二进制流,存储至对应的目标预设内存中;从目标预设内存中获取目标文件字节流,根据预设文件存储协议将目标文件字节流转换为目标待传输数据;将目标待传输数据发送至目标远程传输任务对应的文件存储服务器。通过上述方式,利用套接字使用预设文件存储协议进行远程文件传输,对多个远程传输任务进行批次处理,与多台文件存储服务器创建目标套接字连接,在程序所在服务器上与每台文件存储服务器的连接
只会固定占用一个端口,对能够处理的并发请求量理论值几乎没有影响。
[0095]
此外,本发明实施例还提出一种存储介质,所述存储介质上存储有远程文件传输程序,所述远程文件传输程序被处理器执行时实现如上文所述的远程文件传输方法。
[0096]
由于本存储介质采用了上述所有实施例的全部技术方案,因此至少具有上述实施例的技术方案所带来的所有有益效果,在此不再一一赘述。
[0097]
参照图4,图4为本发明远程文件传输装置第一实施例的结构框图。
[0098]
如图4所示,本发明实施例提出的远程文件传输装置包括:
[0099]
连接模块10,用于与目标文件存储服务器创建套接字连接。
[0100]
读取模块20,用于读取待发送文件的二进制流,存储至预设内存中。
[0101]
转换模块30,用于从所述预设内存中获取文件字节流,根据预设文件存储协议将所述文件字节流转换为待传输数据。
[0102]
发送模块40,用于通过所述套接字连接将所述待传输数据发送至所述目标文件存储服务器。
[0103]
应当理解的是,以上仅为举例说明,对本发明的技术方案并不构成任何限定,在具体应用中,本领域的技术人员可以根据需要进行设置,本发明对此不做限制。
[0104]
本实施例通过与目标文件存储服务器创建套接字连接;通过套接字连接读取待发送文件的二进制流,存储至预设内存中;从预设内存中获取文件字节流,根据预设文件存储协议将文件字节流转换为待传输数据;将待传输数据发送至目标文件存储服务器。通过上述方式,利用套接字使用预设文件存储协议进行远程文件传输,在程序所在服务器上只会固定占用一个端口,对能够处理的并发请求量理论值几乎没有影响。
[0105]
需要说明的是,以上所描述的工作流程仅仅是示意性的,并不对本发明的保护范围构成限定,在实际应用中,本领域的技术人员可以根据实际的需要选择其中的部分或者全部来实现本实施例方案的目的,此处不做限制。
[0106]
另外,未在本实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的远程文件传输方法,此处不再赘述。
[0107]
在一实施例中,所述转换模块30,还用于从所述预设内存中获取文件字节流,确定所述文件字节流对应的数据长度;按照预设转换策略将所述数据长度转换为长度字符串;根据预设文件存储协议将预设行为码、所述长度字符串以及所述文件字节流进行拼接,得到待传输数据。
[0108]
在一实施例中,所述转换模块30,还用于对所述数据长度进行进制转换,得到当前字符串;根据预设字节数对所述当前字符串进行标准化处理,得到长度字符串,所述长度字符串的字节数与所述预设字节数一致。
[0109]
在一实施例中,所述连接模块10,还用于获取返回的异常信息;在检测到所述异常信息不为空时,发出连接异常的提示信息。
[0110]
在一实施例中,所述读取模块20,还用于获取预设文件路径;判断所述预设文件路径下是否存在待发送文件;若存在,则执行读取待发送文件的二进制流,存储至预设内存中的步骤;若不存在,则发出错误提示信息。
[0111]
在一实施例中,所述远程文件传输装置还包括任务分配模块;
[0112]
所述任务分配模块,用于获取包括多个远程传输任务的远程传输任务清单;根据
所述远程传输任务清单的顺序依次确定目标远程传输任务;
[0113]
所述连接模块10,还用于与所述目标远程传输任务对应的文件存储服务器创建目标套接字连接;
[0114]
所述读取模块20,还用于获取所述目标远程传输任务对应的目标待发送文件;读取所述目标待发送文件的二进制流,存储至对应的目标预设内存中;
[0115]
所述转换模块30,还用于从所述目标预设内存中获取目标文件字节流,根据预设文件存储协议将所述目标文件字节流转换为目标待传输数据;
[0116]
所述发送模块40,还用于通过所述目标套接字连接将所述目标待传输数据发送至所述目标远程传输任务对应的文件存储服务器。
[0117]
在一实施例中,所述连接模块10,还用于获取当前连接列表,并根据所述当前连接列表确定已连接设备信息;确定所述目标远程传输任务对应的对端设备信息;在所述已连接设备信息中不包含所述对端设备信息时,执行所述与所述目标远程传输任务对应的文件存储服务器创建目标套接字连接的步骤。
[0118]
此外,需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
[0119]
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0120]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器(read only memory,rom)/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
[0121]
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1