一种文件上传方法和装置与流程

文档序号:12729907阅读:169来源:国知局
一种文件上传方法和装置与流程

本申请涉及计算机技术,特别涉及一种文件上传方法和装置。



背景技术:

有些工作场景涉及到文件上传,例如,按照业务要求在客户端将一些商务文件提交至审核文件的服务器。为了实现文件上传,其中一种可以采用的上传方式为:假设要向某单位的服务器上传文件,可以在客户端侧的浏览器中打开该单位的HTML页面,该HTML页面中包括HTML表单,该HTML表单中可以包括多种用于作为接收用户输入信息容器的控件,用户可以通过访问这些控件向HTML表单中提交信息,当点击提交后,浏览器可以将HTML表单中接收的信息向服务器发送,实现HTML表单的提交。

例如,HTML表单中的其中一种用于接收用户上传的文件的控件即文件上传控件,用户可以点击这个控件选择一个文件,或者在这个控件中输入文件路径名称。待点击提交按钮后,若控件接收的是文件路径,浏览器可以根据文件路径找到文件读出内容,并将文件内容插入HTTP请求包中,发送给服务器。但是,出于保护用户文件的安全性考虑,对于包含文件上传控件的HTML表单,大多数浏览器只允许用户手动访问文件上传控件进行文件上传,而这种人工文件上传的方式使得文件上传的效率较低。



技术实现要素:

有鉴于此,本申请提供一种文件上传方法和装置,以通过访问文件上传 控件实现文件的自动上传和提交,提高文件上传效率。

具体地,本申请是通过如下技术方案实现的:

第一方面,提供一种文件上传方法,所述方法包括:

修改HTML表单中的文件上传控件的输入类型属性为非文件;

在所述文件上传控件中自动设置待上传的目标文件的文件路径;

在提交所述HTML表单后,拦截浏览器向所述HTML表单对应的目标服务器发送的表单提交请求包,所述表单提交请求包中包括:所述HTML表单中的文件上传控件中设置的目标文件的文件路径;

根据所述文件路径获取所述目标文件,并将所述目标文件插入所述表单提交请求包,以将所述目标文件发送至所述目标服务器。

第二方面,提供一种文件上传装置,所述装置包括:

属性修改模块,用于修改HTML表单中的文件上传控件的输入类型属性为非文件;

控件设置模块,用于在所述文件上传控件中自动设置待上传的目标文件的文件路径;

请求拦截模块,用于在提交所述HTML表单后,拦截浏览器向所述HTML表单对应的目标服务器发送的表单提交请求包,所述表单提交请求包中包括:所述HTML表单中的文件上传控件中设置的目标文件的文件路径;

文件插入模块,用于根据所述文件路径获取所述目标文件,并将所述目标文件插入所述表单提交请求包,以将所述目标文件发送至所述目标服务器。

本申请提供的文件上传方法和装置,通过修改文件上传控件的属性,使得浏览器放弃对控件的保护,可以向控件中自动设置文件路径,并且可以由拦截工具代替浏览器根据文件路径在请求包中插入待上传文件,从而实现了文件的自动上传和提交,提高了文件上传效率。

附图说明

图1是本申请一示例性实施例示出的一种文件上传方法的应用场景图;

图2是本申请一示例性实施例示出的一种文件上传方法的流程图;

图3是本申请一示例性实施例示出的一种文件上传方法的实现原理图;

图4是本申请一示例性实施例示出的一种文件上传方法的流程图;

图5是本申请一示例性实施例示出的一种文件上传装置的结构图;

图6是本申请一示例性实施例示出的另一种文件上传装置的结构图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

本申请实施例提供的文件上传方法,可以应用于浏览器环境下通过HTML表单中的文件上传控件来上传文件,这里的文件不限制类型,例如,word文件、PDF文件、txt文档等。

图1示例了本方法的一种应用环境,如图1所示,文件上传可以发生在终端11与服务器12之间,例如,某个部门根据业务需求指定用户向其服务器12上传一些文件供审核所用,终端11可以是一个电脑,用户可以在该电脑上打开浏览器13,并在浏览器13中打开上述部门的一个客户端网站,该网站可以采用HTML页面14。HTML页面14中可以包括一个HTML表单15,用户即可通过该HTML表单15来上传文件,待用户上传文件之后,浏览器13可以负责将HTML表单15提交,即将HTML表单15中用户输入的信息封装成表单提交请求包发送至服务器12,其中包括上传的文件。

HTML表单是HTML页面中的一种用户交互组件,可以作为容器组装其他交互控件,例如,文本框控件、按钮控件、单选框控件等,用户具体可以通过这些控件向HTML表单中输入信息。本例子中,如图1所示,HTML表单15中可以包括多种类型的控件,其中一种控件即文件上传控件16。文件 上传控件是一种特殊的供用户提交信息的HTML控件,允许用户在该控件中上传一个选择的文件,后续浏览器可以将该控件中的文件发送至服务器。

用户可以通过图1所示的HTML表单中的文件上传控件16上传文件,但是,出于保护用户文件的安全性考虑,大多数浏览器只允许用户手动访问该控件上传文件,例如,当用户人工操作上传文件时,可以点击文件上传控件16,在该控件中输入一个文件,或者在控件中输入文件路径,然后点击图1中的提交按钮17。浏览器13可以执行HTML表单的提交,将表单中包括的文件上传控件16中的文件发送至表单指定的服务器12。而如果一个自动化程序访问该文件上传控件16,并自动向该控件中上传文件或文件路径,则根据上述的保护文件原则,浏览器13会将控件中的内容清空,不允许上传。

如上所述,如果在通过HTML表单中的文件上传控件上传文件时,用户只能手动操作文件上传并提交HTML表单,将使得文件上传的效率较低,基于此,为了提高文件上传的效率,本申请实施例提供了一种文件上传方法,该方法可以避开常规的对于文件上传控件的保护,能够自动操作HTML表单中的文件上传控件进行文件上传,并自动触发HTML表单的提交,相对于人工操作可以显著提高文件上传效率。如下将详细描述该方法:

图2示例了本申请实施例的文件上传方法的流程,该方法可以由一个文件上传装置执行,该装置可以实现为一个自动化程序,该装置可以运行在图1所示的终端11上。如图2所示,该方法可以包括如下处理:

在步骤201中,修改HTML表单中的文件上传控件的输入类型属性为非文件。例如,通常文件上传控件的输入类型属性限定为文件,<input type=”file”…>,可以将其修改为<input type=”text”…>,相当于将文件上传控件更改为一个文本框控件,这种修改可以使得浏览器放弃对这个文件上传控件的特殊保护,而允许文件上传装置设置控件的内容。

在步骤202中,在文件上传控件中设置待上传的目标文件的文件路径。

例如,在经过步骤201的属性修改后,浏览器将不再对该控件进行保护,本步骤中,文件上传装置可以根据业务需求向图1中的文件上传控件16中设 置待上传的目标文件的文件路径。

在一个例子中,文件上传装置可以是根据预配置的上传文件信息,在指定的文件上传控件中设置对应的目标文件的文件路径。比如,用户可以设置一个配置信息表,其中包括上传文件信息,例如,在HTML表单的某个文件上传控件中上传文件A,在HTML表单的另一个文件上传控件中上传文件B,并且还包括文件A和文件B的文件路径。用户还可以根据业务需求更改上传文件信息,文件上传装置也可以根据更新后的上传文件信息执行文件上传。

在步骤203中,在指示提交HTML表单后,拦截浏览器向HTML表单对应的目标服务器发送的表单提交请求包,该表单提交请求包中包括:HTML表单中的文件上传控件中设置的目标文件的文件路径。

例如,本例子中的文件上传装置还可以在填充完HTML表单后,自动点击HTML表单中的提交按钮,此时浏览器开始执行表单的提交。浏览器可以收集HTML表单中的所有交互控件,将各个控件的名称及控件中的内容组装成表单提交请求包,通常是HTTP请求包,将该HTTP请求包向HTML表单指定的HTTP地址发送,比如,用户通过某单位网站的HTML表单填写完后,浏览器将向该单位的服务器发送该表单,该服务器可以称为目标服务器。

本实施例的文件上传装置还可以将浏览器发送的表单提交请求包拦截,当然此时表单提交请求包中携带的HTML表单中的文件上传控件中,控件的内容是在步骤202中设置的目标文件的文件路径。

在步骤204中,根据所述文件路径获取所述目标文件,并将所述目标文件插入表单提交请求包,以将目标文件发送至所述目标服务器。

本例子中的文件上传装置在将浏览器的HTTP请求包拦截后,将对该请求包进行修改,修改后再按照指定的目标服务器地址发送给服务器。所做的修改可以包括:根据请求包中携带的文件路径获取目标文件,按照multipart/form-data规范将目标文件插入请求包。其中,当HTML表单中存在文件上传内容时,浏览器需要以multipart/form-data规范格式发送文件给服务器,本步骤的文件上传装置代替浏览器按照这种规范组装文件内容。

由上述本申请实施例的文件上传方法可以看到,该方法修改了HTML表单中的文件上传控件的属性,使得浏览器放弃对该控件的文件上传保护,本申请实施例的文件上传装置就可以自动向文件上传控件中设置文件路径,并且在浏览器提交HTML表单时,文件上传装置还可以拦截浏览器的表单提交请求包,并自动按照文件路径将文件插入到该请求包,从而实现文件自动上传,相对于用户手动操作文件上传显著提高了效率;尤其在批量提交文件时,该方法更能显示加快文件上传速度的效果,批量上传文件时也可以采用多种方式,比如,HTML表单中可以包括多个文件上传控件,每个控件上传一个指定的文件,或者表单中可以有一个文件上传控件,每次在该控件上传一个文件,进行多次上传。

如下描述一种本申请文件上传方法的实现方式:

例如,参见图3的示例,假设终端11可以是一个电脑,该电脑中已经安装有操作系统、浏览器,本例子中,用户还可以在电脑上安装一个HTTP拦截工具18。HTTP拦截工具18安装后,该工具能够对本机其它软件发送的HTTP请求和返回结果进行侦听拦截,在它提供的UI界面上显示,并允许用户手动修改HTTP请求和返回结果,也支持用户编写规则脚本,自动修改HTTP请求和返回结果。

本例子中,可以为用户提供一个文件上传装置,用户可以在电脑上安装该文件上传装置。该文件上传装置包括两个部分,一部分是浏览器插件,另一部分是HTTP拦截工具中的规则脚本。例如,参见图3所示,在安装后,浏览器插件19设置在浏览器13中,浏览器插件19是一种浏览器中允许开发者自主开发的程序,当用户安装此类插件并授权其在浏览器中运行时,插件能够对指定的网站的网页进行访问包括读取和修改,以改变或者扩展新的功能,本例子中的浏览器插件19可以对HTML表单15进行操作,后续描述。HTTP拦截工具18安装在操作系统,规则脚本20设置在HTTP拦截工具18中,该规则脚本20能够拦截浏览器13发送的HTTP请求并进行修改,后续将描述该脚本在本方法中所做的处理。

结合图4说明浏览器插件19和规则脚本20如何配合实现文件上传:

在步骤401中,浏览器插件修改HTML表单中的文件上传控件的输入类型属性为非文件。

例如,当HTML页面加载完成后,浏览器插件19运行,该插件可以修改HTML表单15中的文件上传控件16,将其属性<input type=”file”…>可以修改为<input type=”text”…>,使得浏览器放弃对该控件的特殊保护,而允许自动化程序即本例子的文件上传装置设置控件的内容。

在步骤402中,浏览器插件在文件上传控件中设置待上传的目标文件的文件路径。

在步骤403中,浏览器插件在HTML表单中设置增加字段,该增加字段中包括文件路径的位置信息、以及表示启动文件上传功能的标识信息。

例如,浏览器插件可以在HTML表单中增加一个增加字段,本例子中,比如,该增加字段可以是一个隐藏字段,该隐藏字段中包括文件路径的位置信息,该位置信息可以是设置文件路径的文件上传字段的名称,后续规则脚本根据该文件上传字段的名称,就可以在文件上传字段获取到文件路径。该隐藏字段还可以包括启动文件上传功能的标识信息,该标识信息可以是一个标识位,比如“1”表示启动文件上传功能,“0”表示不启动文件上传功能;当插件在步骤402中设置文件路径之后,可以将该标识位设置为1,以通知后续步骤中的规则脚本执行文件上传。

在步骤404中,浏览器插件指示提交所述HTML表单。

本步骤中,浏览器插件可以点击HTML表单15中的提交按钮17,触发HTML表单的提交。

在步骤405中,浏览器向HTML表单对应的目标服务器发送表单提交请求包,所述表单提交请求包中包括:所述HTML表单中的文件上传控件中设置的目标文件的文件路径。

例如,当步骤404中的提交按钮被点击后,浏览器将开始提交HTML表单,浏览器可以收集HTML表单中的所有交互控件的名称和控件内容,组装 表单提交请求包,也可以称为HTTP请求,该请求将发送至HTML表单指定的服务器地址。其中,在表单提交请求包中可以包括HTML表单中的各个控件的内容,该内容包括文件上传控件中设置的文件路径,还包括隐藏字段。

在步骤406中,HTTP拦截工具拦截浏览器向HTML表单对应的目标服务器发送的表单提交请求包。

例如,本例子的HTTP拦截工具18可以执行对浏览器发送的HTTP请求的拦截,在拦截后对该请求进行后续步骤的修改。

在步骤407中,HTTP拦截工具读取所述HTML表单中的增加字段,根据所述标识信息,执行由所述文件路径的位置信息获取文件路径。

例如,HTTP拦截工具的规则脚本20可以检测到表单提交请求包中的隐藏字段,并且根据该隐藏字段中的标识信息确定插件指示启动文件上传功能,则由隐藏字段找到文件上传字段的名称,并由文件上传字段获取文件路径。

在步骤408中,HTTP拦截工具根据所述文件路径获取所述目标文件。例如,HTTP拦截工具的规则脚本20可以根据获取到的文件路径读取文件。

在步骤409中,HTTP拦截工具将所述目标文件插入所述表单提交请求包,以将所述目标文件发送至所述目标服务器。

例如,HTTP拦截工具可以根据规则脚本20,按照multipart/form-data的规范将文件内容插入HTTP请求包中取代原先的文件路径,并且可以将该文件内容插入在文件上传字段,即规则脚本20可以由HTTP请求包中的该文件上传字段获取文件路径,在根据文件路径获取文件后,再将该文件内容填回文件上传字段。当HTML表单中包括多个文件上传控件时,HTTP拦截工具可以根据规则脚本20逐个执行对控件对应字段的修改,即将控件对应的文件上传字段由文件路径替换为文件内容。

当将文件内容插入HTTP请求包之后,HTTP拦截工具可以继续按照目标服务器的地址发送该HTTP请求,将携带有将上传的文件内容的表单提交请求包发送给服务器。

此外,HTTP拦截工具在将修改后的HTTP请求向目标服务器发送之前, 可以删除请求包中的隐藏字段,避免将其发送到目标服务器。

本实施例通过浏览器插件与HTTP拦截工具中的规则脚本的配合,实现了在HTML表单中自动向文件上传控件设置文件路径,并且可以代替浏览器完成表单提交请求包的组装,自动向服务器上传文件。

上述的由文件上传装置自动实现文件上传的方式,不仅相对于用户手动操作上传可以显著提高文件上传效率,并且,利用该方法上传文件的稳定性比较好,文件上传的过程由浏览器插件和HTTP拦截工具配合执行即可,该过程也不易受到其他外部因素的影响,文件上传的过程不会被外部因素打断,较为稳定。此外,该方法的开发和维护成本较低,例如,只要开发浏览器插件和规则脚本即可,而HTML表单的提交仍然可以由浏览器执行,在浏览器与服务器之间按照既定的协议发送HTTP请求提交表单,本实施例的方法不需要了解HTTP请求的格式意义,只是对浏览器提交的表单做拦截修改即可,实现较为方便;当HTML页面改变了文件上传控件,比如增加了一个控件,或者用户上传的目标文件有所变更时,可以更新上传文件信息,浏览器插件即可根据该上传文件信息执行更新后的在控件中插入文件路径的处理。

这种通过HTML表单的文件上传控件自动上传文件的方法,可以帮助用户自动上传文件,可以用于单个文件或批量文件的上传,并且该方法的应用场景较为广泛,只要是涉及到文件上传的应用都可以使用该方法。此外,还可以使用该方法来测试文件上传页面的上传文件功能。

在另一个例子中,为了保护用户文件的安全,需要防止未授权的HTML页面恶意利用本申请的文件上传装置自动上传文件,还可以在浏览器插件与HTTP拦截工具中的规则脚本之间实现某种安全协议。

例如,以文件上传装置包括浏览器插件和HTTP拦截工具的规则脚本为例,可以在安装文件上传装置时,生成一个对称密钥或者一对非对称密钥,存放在浏览器插件和规则脚本中。加密用的密钥无论是对称密钥还是非对称密钥都可以,只要是在本机上安装本实施例的文件上传装置时动态生成的密钥,并且在浏览器插件与HTTP拦截工具的规则脚本之间共享、本机私有且 对非本机不可见,即可。

例如,浏览器插件在HTML表单中设置增加字段时,以密钥添加数字签名;当后续规则脚本读取拦截的HTML表单中的增加字段之后,可以通过密钥验证所述数字签名,验证通过才读取文件并上传。例如,以非对称密钥为例,可以将增加字段中的信息计算摘要,用私钥加密该摘要生成数字签名;规则脚本可以通过公钥验证该数字签名,比如可以将增加字段中的信息计算摘要,并用公钥解密数字签名得到一个摘要,判断两个摘要是否相同,若相同,则通过验证。当然,也可以使用对称密钥,那么数字签名的生成和验证将使用相同的密钥。

这样,其它未授权的HTML页面就无法伪造环境触发自动文件上传功能,比如,即使一个非法的HTML页面包括填写有文件路径的控件,伪造了一个包括文件上传字段的增加字段,并且假设本实施例的HTTP拦截工具拦截了浏览器对该非法HTML页面信息的发送,规则脚本在验证密钥时就可以识别到这是非法页面,不会再执行文件上传。

本申请实施例的方法中,例如,浏览器可以选择Chrome,在上面开发插件非常方便,插件语言是javascript;HTTP拦截工具可以选择Fiddler,Fiddler支持HTTPS拦截修改,当HTTP请求是HTTPS协议时,需要在HTTP拦截工具中启用HTTPS拦截功能,而且在上面开发规则脚本非常方便,规则脚本语言是JScript.Net。也可以选择其它浏览器和HTTP拦截工具,只要有类似的插件和规则功能,例如浏览器可以选Internet Explorer或者新的Edge等,HTTP拦截工具可以选择Burp等。

图5提供了一种文件上传装置,如图5所示,该装置可以包括:属性修改模块51、控件设置模块52、请求拦截模块53和文件插入模块54。

属性修改模块51,用于修改HTML表单中的文件上传控件的输入类型属性为非文件;

控件设置模块52,用于在所述文件上传控件中设置待上传的目标文件的文件路径;

请求拦截模块53,用于在指示提交所述HTML表单后,拦截浏览器向所述HTML表单对应的目标服务器发送的表单提交请求包,所述表单提交请求包中包括:HTML表单中的文件上传控件中设置的目标文件的文件路径;

文件插入模块54,用于根据文件路径获取目标文件,并将所述目标文件插入所述表单提交请求包,以将所述目标文件发送至所述目标服务器。

在一个例子中,参见图6所示,例如,属性修改模块51和控件设置模块52,可以包括于浏览器插件。请求拦截模块53和文件插入模块54可以包括于HTTP拦截工具的规则脚本。

控件设置模块,用于根据预配置的上传文件信息,在指定的文件上传控件中设置对应的目标文件的文件路径。

在一个例子中,浏览器插件中还包括:字段设置模块55,用于在所述HTML表单中设置增加字段,所述增加字段中包括所述文件路径的位置信息、以及表示启动文件上传功能的标识信息。

在一个例子中,规则脚本中还包括:字段读取模块56,用于读取所述HTML表单中的增加字段,根据所述标识信息执行由所述文件路径的位置信息获取文件路径。

在一个例子中,字段设置模块55,还用于在所述HTML表单中设置增加字段时,以密钥对所述增加字段中的信息进行加密生成数字签名;字段读取模块56,还用于当读取所述增加字段之后,以所述密钥验证所述数字签名。

在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。该计算机可读存储介质中包括的指令例如可以是本申请实施例所述的文件上传装置,该指令可以由处理器执行以完成本申请实施例的文件上传方法。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1