一种文件上传、保存方法及装置的制造方法_2

文档序号:9474332阅读:来源:国知局
0050]当文件在上传的过程中由于网络中断或其他原因导致上传文件中断时,由于服务器端已经记录了客户端发送的文件标识以及上传进度,因此,当用户通过浏览器客户端再次请求上传未传完的文件时,服务器端根据浏览器客户端发来请求信息中携带的文件标识,查找该文件的上传进度,并将文件上传进度反馈给浏览器客户端。
[0051]本发明实施例根据文件的上传进度判断文件是否已上传完毕,如果文件上传进度显示已经上传完毕,则结束流程,也可以进一步向用户发送消息通知用户该文件已完成上传;否则,确定下一个需要上传的文件块。
[0052]实施中,未上传文件部分的文件块可以为文件传输中断前已经切割好的文件块或者为上传进度返回后重新对未上传文件部分切割成的文件块。
[0053]实施中,接收文件块上传成功的反馈信息。
[0054]本发明通过在浏览器上使用HTTP协议上传文件时,把待上传的文件切割成几个文件块。然后上传的时候按照文件的全文hash值生成一个文件标识,依然上传每一个文件块。每当完成一个文件块的上传,服务器会告知客户端该文件块上传成功,客户端再接着上传下一个文件块。
[0055]实施中,起始位置可以由HTTP的range字段携带。
[0056]浏览器客户端根据文件的上传进度判断文件是否已经上传完毕,如果已经上传完成则流程结束;如果没有上传完成则根据上传进度计算HTTP协议的range字段,通常range字段值为上传进度加1,也即HTTP协议的range字段为上传进度的字节数加1,代表下一个需要上传的文件块的起始点。
[0057]本发明实施例使用HTTP协议中的range字段来表示传输文件的起始位置,通过服务器返回的HTTP协议中的content-range字段得到传输完成的内容的字节数,从而可以在下次请求时指定相应的range值。
[0058]例如,文件标识为fc3ff98e8c6a0d3087d515c0473f8677的文件,上传进度为2300,则HTTP协议的range字段为2301。
[0059]浏览器客户端再次通过网页上的Javascript脚本将该文件待上传的文件切割成文件块,根据range值计算下次上传的文件块序列,也即,根据range字段值获取下一个需要上传的文件块。如上面所示的举例,下一个需要上传的文件块为从第2301个字节开始的文件块。
[0060]浏览器客户端向服务器发起上传下一个所需要上传的文件块,从上一次的断点处继续上传该文件未上传的文件部分。该请求中携带有文件标识,并把该请求的头信息的range字段设置成上面计算出来的range值,以此来告知服务器本次上传的文件的起始位置。
[0061]图2为网络侧的文件保存方法实施流程示意图,如图所示,可以包括如下步骤:
[0062]步骤201、保存终端依次上传的需上传文件的文件块,并在每次保存成功后更新需上传文件的上传进度。
[0063]步骤202、在文件传输中断时,接收终端的上传进度请求,请求中包括需上传文件的文件标识;
[0064]步骤203、发送与文件标识对应的上传进度,并在上传进度发送后接收并保存终端上传的需上传文件的未上传文件部分。
[0065]实施中,上传进度可以由HTTP协议的content-range字段携带。
[0066]实施中,可以进一步包括:发送文件块上传成功的反馈信息。
[0067]每上传完毕一个文件块,服务器都会将上传完毕的文件块保存在服务器,并向浏览器客户端反馈当前文件块上传成功。
[0068]服务器在文件块上传成功以后更新其维护的文件标识对应的上传进度,并返回给浏览器客户端本次上传完成的确认。该文件的上传进度可以实时更新,比如在第二个文件块上传完毕后,覆盖第一个文件快上传完毕的信息。
[0069]实施中,接收并保存终端上传的需上传文件的未上传文件部分可以包括:
[0070]接收终端的上传请求,上传请求中包括需上传文件的未上传文件部分的文件块、需上传文件的文件标识和文件块的起始位置;
[0071]根据起始位置和文件标识,保存未上传文件部分的文件块并更新需上传文件的上传进度。
[0072]如果在上传文件的过程中出现掉线等情况,按照本发明实施例所提供的技术方案可以从掉线前上传的进度(或上次上传的进度附近)起接着上传文件余下的部分,而无需再花费时间重新上传已经上传过的文件部分。
[0073]本发明实施例通过在服务器侧维护一个文件标识和上传进度的列表来记录已经上传的文件信息。这样,当客户端浏览器掉线重新连接以后,能够通过向服务器发送请求来获取待上传文件的上传进度。然后从该进度的下一个字节开始上传剩余的内容。服务器中的这部分信息通常维护在内存中,并设置一个过期时间,超过过期时间以后服务器就不再保存已上传部分的文件。也即,超过过期时间后用户再次请求上传文件时,则需要重新从分割的文件块的第一个文件块开始上传。
[0074]由于本发明的技术方案仅需要网络侧记录与文件标识对应的上传进度,用户无需安装浏览器控件或重新开发客户端即可实现文件上传的断点续传,操作简便。并且,由于本发明的技术方案在接收到用户的上传请求后根据上传进度从下一个文件块开始上传,而不是每次接收到上传请求都将该文件全部重新上传,因此,本发明实施例提供的文件上传方法能够让用户在上传文件、特别是大文件的时候,避免因掉线问题而花费大量时间重新上传该文件,操作简单。
[0075]下面以一具体实例进行说明。
[0076]用户在网页上操作触发文件上传,具体可以是用户拖拽文件上传,也可以是通过表单提交,或者通过摄像头拍摄照片后上传。
[0077]客户端在网页上执行Javascript脚本,计算该文件的全文Hash值作为该文件的ID ;并通过网页上的脚本将需上传文件切割成块。
[0078]客户端携带该文件ID向服务器端发送上传请求,按切割好的文件块依次进行上传文件,每上传完毕一个文件块,服务器端都会将上传完毕的文件块保存在服务器,并记录客户端发送的文件ID以及当前文件块上传完毕的信息(也即上传进度)。例如,fc3ff98e8c6a0d3087d515c0473f8677:2300,其中 fc3ff98e8c6a0d3087d515c0473f8677 表示上传文件对应的ID,2300表示上传的进度(以字节为单位)。该文件的上传进度可以实时更新,也就是说在第二个文件块上传完毕后,覆盖第一个文件块上传完毕的信息。
[0079]当文件在上传的过程中由于网络中断或其他原因导致上传文件中断时,服务器端已经记录了客户端发送的文件ID以及文件的上传进度。因此,当终端再次请求上传未传完的文件时,服务器端根据客户端发来请求信息中携带的ID,查找文件上传进度,并将文件的上传进度反馈给客户端。
[0080]客户端根据文件上传进度判断文件是否已经上传完毕,如果已经上传完成则不需要再重复上传了 ;如果没有上传完成,则根据获取的上传进度计算未上传文件的在文件中的起始位置,即计算HTTP协议的range字段,通常是进度+1,即HTTP协议的range字段为上传进度的字节数加1,例如,ID为fc3ff98e8c6a0d3087d515c0473f8677的文件上传的进度为2300,则HTTP协议的range字段为2301。
[0081]客户端再次通过网页上的Javascript脚本将需上传文件的未上传文件部分切割成块,根据range字段值计算下次上传的块序列(下一个需要上传的文件块),也即从第2301个字节开始的文件块。
[0082]客户端向服务器请求上传计算得到的上传块,带着计算得到的文件ID,并将请求头信息的range字段设置成计算后的值,以此告诉服务器端本次上传的文件的起始位置。
[0083]服务器接到请求后,在文件块上传成功后更新其维护的文件ID对应的上传进度信息,并返回给客户端本次上传完成进度的结束点。
[0084]客户端接到返回信息后接着上传下一个文件块,并循环上传余下的所有文件块,直到所有的文件块都上传完成。
[0085]用户在上传一个文件的过程中,如果遇到掉线,那么可以按照以上步骤从上次上传的进度(或上次上传的进度附近)起接着上传需上传文件的未上传文件部分,而无需再花时间重新上传已经上传过的部分。
[0086]基于同一发明构思,本发明还提供了一种文件上传装置、一种文件保存装置,由于这些设备解决问题的原理与一种文件上传方法、一种文件保存方法相似,因此这些设备的实施可以参见方法的实施,重复之处不再赘述。
[0087]图3为文件上传装置结构示意图,如图所示,装置中可以包括:
[0088]确定单元301,用于确定需上传文件,并给予文件标识。
[0089]切割单元302,用于将文件切割成文件块。
[0090]上传单元303,用于在将文件切割成文件块后,在上传请求中携带文件标识,并依次上传文件块;在文件传输中断时,请求返回上传进度,并在上传进度返回后根据上传进度上传需上传文件中的未上传文件部分。
[0091]实施中,确定单元301可以进一步用于对文件进行全文哈希操作,将哈希得到的哈希值作为文件标识。
[0092]实施中,上传单元3
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1