CN107743137A - 一种文件上传方法及装置 - Google Patents
一种文件上传方法及装置 Download PDFInfo
- Publication number
- CN107743137A CN107743137A CN201610852953.XA CN201610852953A CN107743137A CN 107743137 A CN107743137 A CN 107743137A CN 201610852953 A CN201610852953 A CN 201610852953A CN 107743137 A CN107743137 A CN 107743137A
- Authority
- CN
- China
- Prior art keywords
- data stream
- micro
- caching
- line journey
- stream fragment
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/06—Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明实施例公开了一种文件上传方法及装置,文件上传方法包括:接收客户端发送的文件上传请求,所述文件上传请求中包含完整文件内容;解析所述文件上传请求,并将解析得到的数据流片段存入缓存;当所述缓存中存入的数据流片段的大小达到预设阈值时,调度进程里的微线程将缓存中的数据流片段写入存储模块,重复该步骤,直至将所述完整文件内容的所有数据流片段写入存储模块。本发明实施例能够减小缓存压力,提高上传性能。
Description
技术领域
本发明实施例涉及通信技术领域,具体涉及一种文件上传方法及装置。
背景技术
对象存储服务,通常是指客户端通过超文本传送协议(Hypertext transferprotocol,HTTP)的推送请求上传文件至存储服务器,客户端向公共网关接口(CommonGateway Interface,CGI)发送推送请求,在推送请求的主体里携带完整的文件内容,CGI程序缓存到文件内容后再写入到存储,现有的CGI框架的设计,通常需要在缓存到推送请求主体内的完整文件内容后才将内容转发给CGI进程来处理,当文件很大时,框架就需要缓存巨大的文件内容,这样很容易导致内存爆掉;另外,一个CGI进程同时只能处理一个请求,很容易造成输入输出(Input Output,IO)接口阻塞,当遭遇IO接口阻塞时,现有技术往往通过粗暴增加CGI进程数的方式来解决,而一个接一个CGI进程这种简单粗暴的解决方式,会给服务器带来巨大的压力,高并发时很容易引起服务器的卡死,速度慢甚至故障等异常现象,严重影响上传性能。
发明内容
有鉴于此,本发明实施例提供了一种文件上传方法及装置,能够减小缓存压力,提高上传性能。
本发明实施例提供的文件上传方法,包括:
接收客户端发送的文件上传请求,所述文件上传请求中包含完整文件内容;
解析所述文件上传请求,并将解析得到的数据流片段存入缓存;
当所述缓存中存入的数据流片段的大小达到预设阈值时,调度进程里的微线程将缓存中的数据流片段写入存储模块,重复该步骤,直至将所述完整文件内容的所有数据流片段写入存储模块。
本发明实施例提供的文件上传装置,包括:
接收单元,用于接收客户端发送的文件上传请求,所述文件上传请求中包含完整文件内容;
解析单元,用于解析所述文件上传请求,并将解析得到的数据流片段存入缓存;
调度单元,用于当所述缓存中存入的数据流片段的大小达到预设阈值时,调度进程里的微线程将缓存中的数据流片段写入存储模块,重复该步骤,直至将所述完整文件内容的所有数据流片段写入存储模块。
本发明实施例中,在接收到客户端发送的文件上传请求之后,可以解析所述文件上传请求,并将解析得到的数据流片段存入缓存,当所述缓存中存入的数据流片段的大小达到预设阈值时,调度进程里的微线程将缓存中的数据流片段写入存储模块,以此重复,直至将完整文件内容的所有数据流片段写入存储模块。由于在本发明实施例中,文件内容可以分段上传,使得缓存中每次只需要缓存预设阈值大小的数据流片段,而无需缓存完整的文件内容,所以,可以减少内存占用,减小缓存压力;另外,由于进程里采用了微线程的设计模式,即一个进程里可以包括多个微线程,使得当该进程的某个微线程遭遇IO阻塞时,可以调用其他微线程继续进行处理,因此,相对于现有技术方案而言,可以大大提升高并发时的应对能力,减少系统态的进程数,减少系统资源的占用,以及提高了上传性能。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例所提供的文件上传方法的一个场景示意图;
图2是本发明实施例所提供的文件上传方法的一个流程示意图;
图3是本发明实施例所提供的文件上传方法的另一流程示意图;
图4是本发明实施例所提供的文件上传装置的一个结构示意图;
图5是本发明实施例所提供的文件上传装置的另一结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
由于现有技术在上传文件时,需要缓存完整的文件内容后进程才将内容写入存储,导致缓存压力过大,且一个进程只能同时处理一个请求,容易造成IO阻塞,上传性能不佳,因而,本发明实施例提供了一种文件上传方法及装置,文件上传方法可实现在文件上传装置中,文件上传装置可以为存储服务器等设备。本发明实施例文件上传方法一个实施场景可如图1所示,包括客户端和存储服务器,客户端可以包括但不限于手机、平板电脑、笔记本电脑等电子设备,存储服务器可以是云存储服务器。当客户端需要上传文件至存储服务器时,客户端可以向存储服务器发送文件上传请求,文件上传请求中可以携带完整文件内容,存储服务器接收客户端发送的文件上传请求,解析文件上传请求以得到数据流片段,将解析到的数据流片段存入缓存,当缓存中存储的数据流片段的大小达到预设阈值(例如1M、2M等)时,从缓存中取出数据流片段,然后调度进程里的微线程将缓存中的数据流片段写入存储模块,重复该步骤,每当缓存中存储的数据流片段的大小达到预设阈值时,即执行一次写入存储模块的动作,直至将所述完整文件内容的所有数据流片段写入存储模块,这样缓存中每次只需要缓存预设阈值大小的数据流片段,而不用缓存完整的文件内容,文件流式分段上传,因而可以减少内存占用,减小缓存压力;另外进程里采用微线程的设计模式,一个进行里可以包括多个微线程,调用进程里的微线程将数据流片段写入存储模块,当某个微线程遭遇IO阻塞时,可以调用其他微线程,提升了高并发时的应对能力,减少了系统态的进程数,减少了系统资源的占用,提高了上传性能。
以下分别进行详细说明,需说明的是,以下实施例的序号不作为对实施例优选顺序的限定。
实施例一
本实施例将从存储服务器的角度描述本发明提供的文件上传方法,如图2所示,本实施例的方法包括以下步骤:
步骤201、接收客户端发送的文件上传请求,所述文件上传请求中包含完整文件内容;
当客户端需要上传文件时,发送文件上传请求,文件上传请求具体可以是HTTP的推送请求,完整文件内容可以携带在推送请求的主体里,文件上传装置接收客户端发送的文件上传请求。
步骤202、解析所述文件上传请求,并将解析得到的数据流片段存入缓存;
步骤203、当所述缓存中存入的数据流片段的大小达到预设阈值时,调度进程里的微线程将缓存中的数据流片段写入存储模块,以此类推,直至将所述完整文件内容的所有数据流片段写入存储模块。
预设阈值的具体取值可视实际需求自定义,例如可以定义为1M、2M等。当缓存中存入的数据流片段的大小达到预设阈值之后,可以为缓存中的数据流片段添加序号,并创建存储索引,其中,所述序号可以用来标识缓存中的该数据流片段在完整文件内容中的位置,完整的文件内容可以包括多个预设阈值大小的数据流片段;所述存储索引可以用于标识缓存中的该数据流片段在存储模块中的存储位置。
在为缓存中的数据流片段添加序号,并创建存储索引之后,可以调用进程里的微线程将缓存中的数据流片段写入存储模块。即本实施例中,进程内部采用微线程的设计模式,进程由微线程构成,微线程是进程中的一条执行路径,每个进程内允许包括多个并行执行的路径,即每个进程内可以包括多个微线程。微线程可以看做是系统进行处理器调度的基本单位,同一个进程中的所有微线程共享进程获得的主存空间和资源,同一个进程中的多个微线程可以并发执行,一个微线程可以具有如下几种状态:
创建态,指的是线程刚刚被创建,并进入到静态随机存取存储器(Static RandomAccess Memory,SRAM)中的状态;
运行态,指的是线程占有处理器正在运行的状态;
就绪态,指的是线程位于SRAM中,具备运行条件,等待分配处理器以便运行的状态;
阻塞态,指的是线程位于SRAM中,不具备运行条件,正在等待某个事件的完成的状态;
就绪换出态和阻塞换出态,指的是由于SRAM空间不足,线程将被交换出SRAM,进入到同步动态随机存储器(Synchronous Dynamic Random Access Memory,SDRAM)中去,暂时不参与线程调度的状态;
退出态,指的是线程结束,推书SRAM,以后不再执行的状态。
具体地,可以采用如下几种方式调用进程里的微线程将缓存中的数据流片段写入存储模块:
在进程里为本次写入新建一个微线程,利用新建的微线程将缓存中的数据流片段通过网络端口发往存储模块(例如存储的落地模块、索引模块),网络端口可以指Socket,Socket通常也称作“套接字”,用于描述互联网协议(Internet Protocol,IP)地址和端口,Socket=IP地址+端口号(port)。
或者,从进程的线程池内选择空闲的微线程(例如处于就绪态的微线程),将缓存中的数据流片段发送给空闲的微线程,以利用空闲的微线程将缓存中的数据流片段通过网络端口发往存储模块。在此过程中,可以通过演进的轮询监听机制调度空闲的微线程,演进的轮询监听机制可以称为Epoll,即evolved poll。
或者,将缓存中的数据流片段发送给进程里的第一微线程(即调用第一微线程,第一微线程为没有遇到IO阻塞的微线程),以使得所述第一微线程对缓存中的数据流片段进行逻辑处理(例如加密、截取等处理);接收所述第一微线程发送的经逻辑处理之后的数据流片段;将经逻辑处理之后的数据流片段发送给进程里的第二微线程(即调度第二微线程,第二微线程为没有遇到IO阻塞的微线程),以使得所述第二微线程将经逻辑处理之后的数据流片段通过网络端口发往存储模块。在此过程中,仍可以通过Epoll监听机制调度第一微线程及第二微线程。
当然,具体实现中,除了Epoll监听机制之外,还可以采用其他的监听机制调度微线程,例如采用选拔(select)、轮询(poll)等监听机制调度微线程。
Epoll监听机制的处理效率优于select、poll等监听机制,例如当有一个很大的套接字(socket)集合(即IO事件集合)时,select、poll每次调用都会线性扫描全部的集合,导致效率呈现线性下降,但是由于网络延时,任一时间只有部分的socket是"活跃"的,而epoll只会对"活跃"的socket进行操作,这是因为在内核实现中epoll是根据每个文件描述符(file descriptor,fd)上面的回调(callback)函数实现的,那么,只有"活跃"的socket才会主动的去调用callback函数,其他空闲状态socket则不会。
Epoll模型可以对大量并发用户的请求进行及时处理,完成服务器与客户端的数据交互。
Epoll有两种工作方式,水平触发(level triggered,LT)和边缘触发(edge-triggered,ET)。
LT是缺省的工作方式,并且同时支持阻塞(block)和非阻塞(no-block)socket,在这种做法中,当内核通知一个fd就绪时,可以对这个就绪的fd进行IO操作,如果不作任何操作,内核会继续发送通知你,所以,这种模式编程出错误的可能性要小一点,传统的select、poll都是这种模型的代表。
ET是高速的工作方式,只支持no-block socket。在这种模式下,当描述符从未就绪变为就绪时,内核通过epoll发送通知,然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述符发送更多的就绪通知,直到你做了某些操作导致那个文件描述符不再为就绪状态了(比如你在发送,接收或者接收请求,或者发送接收的数据少于一定量时导致了一个错误)。但是如果一直不对这个fd做IO操作(从而导致它再次变成未就绪),内核也不会发送更多的通知。
Epoll的具体实现步骤如下:
首先,使用epoll_create()函数创建文件描述,设定将可管理的最大socket描述符数目;
接下来创建与epoll关联的线程,应用程序可以创建多个线程来处理epoll上的读写通知事件,线程的数量依赖于程序的具体需要;
然后创建一个socket侦听(ListenSock)描述符,将该描述符设定为非阻塞模式,调用侦听Listen()函数在套接字上侦听有无新的连接请求,在epoll事件(epoll_event)结构中设置要处理的事件类型EPOLLIN,工作方式可设为epoll_ET,以提高工作效率,同时使用epoll_ctl()注册事件,最后启动网络监视线程;
网络监视线程启动循环,epoll_wait()等待epoll事件发生;
如果epoll事件表明有新的连接请求,则调用accept()函数,将用户socket描述符添加到epoll数据(epoll_data)联合体,同时设定该描述符为非阻塞,并在epoll_event结构中设置要处理的事件类型为读和写,工作方式为epoll_ET;
如果epoll事件表明socket描述符上有数据可写,则将该socket描述符加入可写队列,通知线程写入数据。
当调用进程里的微线程将缓存中的数据流片段写入存储模块之后,可以判断是否写入成功,如写入失败,则向客户端发送写入失败通知消息,客户端在接收到写入失败通知消息之后,可以重新上传文件;若写入成功,则继续写入,即每当缓存中存储的数据流片段的大小达到预设阈值时,就执行一次写入存储模块的动作,直至所述完整文件内容的所有数据流片段写入存储模块,这样,不仅可以大大缩短等待缓存存储文件的时间,而且,由于不用缓存完整的文件内容,所以,对文件内容的大小也无需进行限制,理论上传送的文件内容的大小可以无上限。
将完整文件内容的所有数据流片段成功写入存储模块之后,可以向用户发送上传成功通知消息,然后,可以根据所述存储索引查找所存储的对应的的数据流片段,根据所述序号将查找到的各个数据流片段合并起来组成所述完整文件内容。
本实施例中,在接收到客户端发送的文件上传请求之后,可以解析所述文件上传请求,并将解析得到的数据流片段存入缓存,当所述缓存中存入的数据流片段的大小达到预设阈值时,调度进程里的微线程将缓存中的数据流片段写入存储模块,以此重复,直至将完整文件内容的所有数据流片段写入存储模块。由于在本实施例中,文件内容可以分段上传,使得缓存中每次只需要缓存预设阈值大小的数据流片段,而无需缓存完整的文件内容,所以,可以减少内存占用,减小缓存压力;另外,由于进程里采用了微线程的设计模式,即一个进程里可以包括多个微线程,使得当该进程的某个微线程遭遇IO阻塞时,可以调用其他微线程继续进行处理,因此,相对于现有技术方案而言,可以大大提升高并发时的应对能力,减少系统态的进程数,减少系统资源的占用,以及提高了上传性能。
实施例二
实施例一所描述的方法,本实施例将举例作进一步详细说明,如图3所示,本实施例的方法包括:
步骤301、接收客户端发送的文件上传请求,所述文件上传请求中包含完整文件内容;
当客户端需要上传文件时,发送文件上传请求,文件上传请求具体可以是HTTP的推送请求,完整文件内容可以携带在推送请求的主体里,文件上传装置接收客户端发送的文件上传请求。
步骤302、解析所述文件上传请求并将解析得到的数据流片段存入缓存;
步骤303、当缓存中存入的数据流片段的大小达到预设阈值时,为缓存中的数据流片段添加序号,并创建存储索引;
预设阈值的具体取值可视实际需求自定义,例如可以定义为1M、2M等。当缓存中存入的数据流片段的大小达到预设阈值之后,可以为缓存中的数据流片段添加序号,并创建存储索引,其中,所述序号可以用来标识缓存中的该数据流片段在完整文件内容中的位置,完整的文件内容可以包括多个预设阈值大小的数据流片段;所述存储索引可以用于标识缓存中的该数据流片段在存储模块中的存储位置。
步骤304、调度进程里的微线程将缓存中的数据流片段写入存储模块;
即本实施例中,进程内部采用微线程的设计模式,进程由微线程构成,微线程是进程中的一条执行路径,每个进程内允许包括多个并行执行的路径,即每个进程内可以包括多个微线程。微线程可以看做是系统进行处理器调度的基本单位,同一个进程中的所有微线程共享进程获得的主存空间和资源,同一个进程中的多个微线程可以并发执行,一个微线程可以具有如下几种状态:
创建态,指的是线程刚刚被创建,并进入到静态随机存取存储器(Static RandomAccess Memory,SRAM)中的状态;
运行态,指的是线程占有处理器正在运行的状态;
就绪态,指的是线程位于SRAM中,具备运行条件,等待分配处理器以便运行的状态;
阻塞态,指的是线程位于SRAM中,不具备运行条件,正在等待某个事件的完成的状态;
就绪换出态和阻塞换出态,指的是由于SRAM空间不足,线程将被交换出SRAM,进入到同步动态随机存储器(Synchronous Dynamic Random Access Memory,SDRAM)中去,暂时不参与线程调度的状态;
退出态,指的是线程结束,推书SRAM,以后不再执行的状态。
具体地,可以采用如下几种方式调用进程里的微线程将缓存中的数据流片段写入存储模块:
在进程里为本次写入新建一个微线程,利用新建的微线程将缓存中的数据流片段通过网络端口发往存储模块(例如存储的落地模块、索引模块),网络端口可以指Socket,Socket通常也称作“套接字”,用于描述互联网协议(Internet Protocol,IP)地址和端口,Socket=IP地址+端口号(port)。
或者,从进程的线程池内选择空闲的微线程(例如处于就绪态的微线程),将缓存中的数据流片段发送给空闲的微线程,以利用空闲的微线程将缓存中的数据流片段通过网络端口发往存储模块。在此过程中,可以通过演进的轮询监听机制调度空闲的微线程,演进的轮询监听机制可以称为Epoll,即evolved poll。
或者,将缓存中的数据流片段发送给进程里的第一微线程(即调用第一微线程,第一微线程为没有遇到IO阻塞的微线程),以使得所述第一微线程对缓存中的数据流片段进行逻辑处理(例如加密、截取等处理);接收所述第一微线程发送的经逻辑处理之后的数据流片段;将经逻辑处理之后的数据流片段发送给进程里的第二微线程(即调度第二微线程,第二微线程为没有遇到IO阻塞的微线程),以使得所述第二微线程将经逻辑处理之后的数据流片段通过网络端口发往存储模块。在此过程中,仍可以通过Epoll监听机制调度第一微线程及第二微线程。
当然,具体实现中,除了Epoll监听机制之外,还可以采用其他的监听机制调度微线程,例如采用选拔(select)、轮询(poll)等监听机制调度微线程。
Epoll监听机制的处理效率优于select、poll等监听机制,例如当有一个很大的套接字(socket)集合(即IO事件集合)时,select、poll每次调用都会线性扫描全部的集合,导致效率呈现线性下降,但是由于网络延时,任一时间只有部分的socket是"活跃"的,而epoll只会对"活跃"的socket进行操作,这是因为在内核实现中epoll是根据每个文件描述符(file descriptor,fd)上面的回调(callback)函数实现的,那么,只有"活跃"的socket才会主动的去调用callback函数,其他空闲状态socket则不会。
Epoll模型可以对大量并发用户的请求进行及时处理,完成服务器与客户端的数据交互。
Epoll有两种工作方式,水平触发(level triggered,LT)和边缘触发(edge-triggered,ET)。
LT是缺省的工作方式,并且同时支持阻塞(block)和非阻塞(no-block)socket,在这种做法中,当内核通知一个fd就绪时,可以对这个就绪的fd进行IO操作,如果不作任何操作,内核会继续发送通知你,所以,这种模式编程出错误的可能性要小一点,传统的select、poll都是这种模型的代表。
ET是高速的工作方式,只支持no-block socket。在这种模式下,当描述符从未就绪变为就绪时,内核通过epoll发送通知,然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述符发送更多的就绪通知,直到你做了某些操作导致那个文件描述符不再为就绪状态了(比如你在发送,接收或者接收请求,或者发送接收的数据少于一定量时导致了一个错误)。但是如果一直不对这个fd做IO操作(从而导致它再次变成未就绪),内核也不会发送更多的通知。
Epoll的具体实现步骤如下:
首先,使用epoll_create()函数创建文件描述,设定将可管理的最大socket描述符数目;
接下来创建与epoll关联的线程,应用程序可以创建多个线程来处理epoll上的读写通知事件,线程的数量依赖于程序的具体需要;
然后创建一个socket侦听(ListenSock)描述符,将该描述符设定为非阻塞模式,调用侦听Listen()函数在套接字上侦听有无新的连接请求,在epoll事件(epoll_event)结构中设置要处理的事件类型EPOLLIN,工作方式可设为epoll_ET,以提高工作效率,同时使用epoll_ctl()注册事件,最后启动网络监视线程;
网络监视线程启动循环,epoll_wait()等待epoll事件发生;
如果epoll事件表明有新的连接请求,则调用accept()函数,将用户socket描述符添加到epoll数据(epoll_data)联合体,同时设定该描述符为非阻塞,并在epoll_event结构中设置要处理的事件类型为读和写,工作方式为epoll_ET;
如果epoll事件表明socket描述符上有数据可写,则将该socket描述符加入可写队列,通知线程写入数据。
步骤305、判断是否写入成功,若写入成功,则执行步骤306,否则执行步骤308;
步骤306、继续写入,直至将所述完整文件内容的所有数据流片段写入存储模块;
即每当缓存中存储的数据流片段的大小达到预设阈值时,就执行一次写入存储模块的动作,直至所述完整文件内容的所有数据流片段写入存储模块,这样,不仅可以大大缩短等待缓存存储文件的时间,而且,由于不用缓存完整的文件内容,所以,对文件内容的大小也无需进行限制,理论上传送的文件内容的大小可以无上限。
在将完整文件内容的所有数据流片段成功写入存储模块之后,可以向用户发送上传成功通知消息。
步骤307、根据所述存储索引及所述序号查找并合并各个数据流片段组成完整文件内容;
具体地,可以根据所述存储索引查找所存储的对应的的数据流片段,根据所述序号将查找到的各个数据流片段合并起来组成所述完整文件内容。
步骤308、向所述客户端发送写入失败通知消息。
客户端在接收到写入失败通知消息之后,可以重新上传文件。
下面举例说明,例如客户端需要将一个4M的文件上传至存储服务器,服务器的缓存内每次存储的数据流片段的大小达到1M就读出,服务器的CGI进程里新建了三个微线程,微线程a、微线程b及微线程c,3个微线程每个均与存储模块创建了传输控制协议(Transmission Control Protocol,TCP)连接。当客户端向服务器发送文件上传请求时,服务器解析该文件上传请求,并将解析到的数据流片段存入缓存,当缓存中存入了第一个1M的数据流片段时,从缓存中读出第一个1M的数据流片段,将第一个1M的数据流片段发送给微线程a,以使得微线程a将第一个1M的数据流片段写入存储;当缓存中存入了第二个1M的数据流片段时,若此时微线程a还未写完,即写入阻塞,则跳转至微线程b,由微线程b将第二个1M的数据流片段写入存储;当缓存中存入了第三个1M的数据流片段时,若此时微线程a、b均写入阻塞,则跳转至微线程c,由微线程c将第三个1M的数据流片段写入存储;当缓存中存入了第四个1M的数据流片段时,此时微线程b、c可能写入阻塞,但微线程a可能已空闲,则可以跳转至微线程a,由微线程a将第四个1M的数据流片段写入存储,最后将写入存储的这4个1M的数据流片段按顺序合并组成完整文件内容。
同理,当多个客户端同时发送文件上传请求时,可以调用进程内的不同微线程并行处理,因而本发明实施例中一个进程可以并发处理大量的请求,即服务器的处理能力大大得到了提升。
本实施例中,在接收到客户端发送的文件上传请求之后,可以解析所述文件上传请求,并将解析得到的数据流片段存入缓存,当所述缓存中存入的数据流片段的大小达到预设阈值时,调度进程里的微线程将缓存中的数据流片段写入存储模块,以此重复,直至将完整文件内容的所有数据流片段写入存储模块。由于在本实施例中,文件内容可以分段上传,使得缓存中每次只需要缓存预设阈值大小的数据流片段,而无需缓存完整的文件内容,所以,可以减少内存占用,减小缓存压力;另外,由于进程里采用了微线程的设计模式,即一个进程里可以包括多个微线程,使得当该进程的某个微线程遭遇IO阻塞时,可以调用其他微线程继续进行处理,因此,相对于现有技术方案而言,可以大大提升高并发时的应对能力,减少系统态的进程数,减少系统资源的占用,以及提高了上传性能。
实施例三
为了更好地实施以上方法,本发明实施例还提供一种存储服务器,如图4所示,本实施例的存储服务器包括:接收单元401,解析单元402及调度单元403,如下:
(1)接收单元401;
接收单元401,用于接收客户端发送的文件上传请求,所述文件上传请求中包含完整文件内容。
具体地,所述文件上传请求可以是HTTP的推送请求,完整文件内容可以携带在推送请求的本体里。
(2)解析单元402;
解析单元402,用于解析所述文件上传请求,并将解析得到的数据流片段存入缓存;
(3)调度单元403;
调度单元403,用于当所述缓存中存入的数据流片段的大小达到预设阈值时,调度进程里的微线程将缓存中的数据流片段写入存储模块,重复该步骤,直至将所述完整文件内容的所有数据流片段写入存储模块。
进一步地,文件上传装置还可以包括添加单元、判断单元、通知单元及合并单元,其中:
添加单元可以用于,在所述缓存中存入的数据流片段的大小达到预设阈值时,为缓存中的数据流片段添加序号,并创建存储索引,然后由调度单元403调度进程里的微线程将缓存中的数据流片段写入存储模块,当调度单元403调度进程里的微线程将缓存中的数据流片段写入存储模块之后,判断单元可以判断是否写入成功,若写入失败,则发送单元向所述客户端发送写入失败通知消息,若写入成功,则调度单元继续调度进程里的微线程将缓存内的数据流片段写入存储模块,以此类推,直至写入完整文件内容的所有数据流片段,最后合并单元根据所述存储索引查找所存储的对应的数据流片段,根据所述序号将查找到的数据流片段合并起来组成所述完整文件内容。
其中,调度单元403可以包括创建子单元及第一发送子单元,创建子单元用于在进程里新建微线程;第一发送子单元用于将缓存中的数据流片段发送给新建的微线程,以利用新建的微线程将缓存中的数据流片段通过网络端口发往存储模块。
或者调度单元403可以包括选择子单元及第二发送子单元,选择子单元用于从进程的线程池内选择空闲的微线程;第二发送子单元用于将缓存中的数据流片段发送给空闲的微线程,以利用空闲的微线程将缓存中的数据流片段通过网络端口发往存储模块。
或者调度单元403可以包括第三发送子单元、接收子单元及第四发送子单元,第三发送子单元用于将缓存中的数据流片段发送给进程里的第一微线程,以使得所述第一微线程对缓存中的数据流片段进行逻辑处理;接收子单元用于接收所述第一微线程发送的经逻辑处理之后的数据流片段;第四发送子单元用于将经逻辑处理之后的数据流片段发送给进程里的第二微线程,以使得所述第二微线程将经逻辑处理之后的数据流片段通过网络端口发往存储模块。
具体地,所述第一微线程与所述第二微线程可以在演进的轮询监听机制下被调度。演进的轮询监听机制可以称为Epoll,即evolved poll,当然,所述第一微线程与所述第二微线程还可以在选拔(select)、轮询(poll)等监听机制下被调度,此处不做具体限定。
本实施例中,在接收单元接收到客户端发送的文件上传请求之后,解析单元可以解析所述文件上传请求,并将解析得到的数据流片段存入缓存,当所述缓存中存入的数据流片段的大小达到预设阈值时,调度单元调度进程里的微线程将缓存中的数据流片段写入存储模块,以此重复,直至将完整文件内容的所有数据流片段写入存储模块。由于在本实施例中,文件内容可以分段上传,使得缓存中每次只需要缓存预设阈值大小的数据流片段,而无需缓存完整的文件内容,所以,可以减少内存占用,减小缓存压力;另外,由于进程里采用了微线程的设计模式,即一个进程里可以包括多个微线程,使得当该进程的某个微线程遭遇IO阻塞时,可以调用其他微线程继续进行处理,因此,相对于现有技术方案而言,可以大大提升高并发时的应对能力,减少系统态的进程数,减少系统资源的占用,以及提高了上传性能。
实施例四
本发明实施例还提供一种文件上传装置,如图5所示,其示出了本发明实施例所涉及的装置的结构示意图,具体来讲:
该装置可以包括一个或者一个以上处理核心的处理器501、一个或一个以上计算机可读存储介质的存储器502、射频(Radio Frequency,RF)电路503、电源505、输入单元505、以及显示单元506等部件。本领域技术人员可以理解,图5中示出的装置结构并不构成对装置的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器501是该装置的控制中心,利用各种接口和线路连接整个装置的各个部分,通过运行或执行存储在存储器502内的软件程序和/或模块,以及调用存储在存储器502内的数据,执行装置的各种功能和处理数据,从而对装置进行整体监控。可选的,处理器501可包括一个或多个处理核心;优选的,处理器501可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器501中。
存储器502可用于存储软件程序以及模块,处理器501通过运行存储在存储器502的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器502可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据装置的使用所创建的数据等。此外,存储器502可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器502还可以包括存储器控制器,以提供处理器501对存储器502的访问。
RF电路503可用于收发信息过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器501处理;另外,将涉及上行的数据发送给基站。通常,RF电路503包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM)卡、收发信机、耦合器、低噪声放大器(LNA,Low Noise Amplifier)、双工器等。此外,RF电路503还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(GSM,Global System of Mobilecommunication)、通用分组无线服务(GPRS,General Packet Radio Service)、码分多址(CDMA,Code Division Multiple Access)、宽带码分多址(WCDMA,Wideband CodeDivision Multiple Access)、长期演进(LTE,Long Term Evolution)、电子邮件、短消息服务(SMS,Short Messaging Service)等。
装置还包括给各个部件供电的电源504(比如电池),优选的,电源504可以通过电源管理系统与处理器501逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源504还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该装置还可包括输入单元505,该输入单元505可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,在一个具体的实施例中,输入单元505可包括触敏表面以及其他输入设备。触敏表面,也称为触摸显示屏或者触控板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表面上或在触敏表面附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触敏表面可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器501,并能接收处理器501发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触敏表面。除了触敏表面,输入单元505还可以包括其他输入设备。具体地,其他输入设备可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
该装置还可包括显示单元506,该显示单元506可用于显示由用户输入的信息或提供给用户的信息以及装置的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元506可包括显示面板,可选的,可以采用液晶显示器(LCD,Liquid Crystal Display)、有机发光二极管(OLED,Organic Light-EmittingDiode)等形式来配置显示面板。进一步的,触敏表面可覆盖显示面板,当触敏表面检测到在其上或附近的触摸操作后,传送给处理器501以确定触摸事件的类型,随后处理器501根据触摸事件的类型在显示面板上提供相应的视觉输出。虽然在图5中,触敏表面与显示面板是作为两个独立的部件来实现输入和输入功能,但是在某些实施例中,可以将触敏表面与显示面板集成而实现输入和输出功能。
尽管未示出,装置还可以包括摄像头、蓝牙模块等,在此不再赘述。具体在本实施例中,装置中的处理器501会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器502中,并由处理器501来运行存储在存储器502中的应用程序,从而实现各种功能,如下:
接收客户端发送的文件上传请求,所述文件上传请求中包含完整文件内容;
解析所述文件上传请求,并将解析得到的数据流片段存入缓存;
当所述缓存中存入的数据流片段的大小达到预设阈值时,调度进程里的微线程将缓存中的数据流片段写入存储模块,重复该步骤,直至将所述完整文件内容的所有数据流片段写入存储模块。
进一步地,该处理器501还用于,在所述缓存中存入的数据流片段的大小达到预设阈值时,为缓存中的数据流片段添加序号,并创建存储索引。
进一步地,该处理器501还用于,在调度进程里的微线程将缓存中的数据流片段写入存储模块之后,判断是否写入成功;若写入失败,则向所述客户端发送写入失败通知消息。
进一步地,该处理器501还用于,在将所述完整文件内容的所有数据流片段写入存储之后,根据所述存储索引查找所存储的对应的数据流片段,根据所述序号将查找到的数据流片段合并起来组成所述完整文件内容。
具体地,该处理器501可以按照如下方式调度进程里的微线程将缓存中的数据流片段写入存储模块:
在进程里新建微线程;
将缓存中的数据流片段发送给新建的微线程,以利用新建的微线程将缓存中的数据流片段通过网络端口发往存储模块。
或者,该处理器501可以按照如下方式调度进程里的微线程将缓存中的数据流片段写入存储模块:
从进程的线程池内选择空闲的微线程;
将缓存中的数据流片段发送给空闲的微线程,以利用空闲的微线程将缓存中的数据流片段通过网络端口发往存储模块。
再或者,该处理器501可以按照如下方式调度进程里的微线程将缓存中的数据流片段写入存储模块:
将缓存中的数据流片段发送给进程里的第一微线程,以使得所述第一微线程对缓存中的数据流片段进行逻辑处理;
接收所述第一微线程发送的经逻辑处理之后的数据流片段;
将经逻辑处理之后的数据流片段发送给进程里的第二微线程,以使得所述第二微线程将经逻辑处理之后的数据流片段通过网络端口发往存储模块。
具体地,所述第一微线程与所述第二微线程在演进的轮询监听机制下被调度。
本实施例中,文件上传装置在接收到客户端发送的文件上传请求之后,可以解析所述文件上传请求,并将解析得到的数据流片段存入缓存,当所述缓存中存入的数据流片段的大小达到预设阈值时,调度进程里的微线程将缓存中的数据流片段写入存储模块,以此重复,直至将完整文件内容的所有数据流片段写入存储模块。由于在本实施例中,文件内容可以分段上传,使得缓存中每次只需要缓存预设阈值大小的数据流片段,而无需缓存完整的文件内容,所以,可以减少内存占用,减小缓存压力;另外,由于进程里采用了微线程的设计模式,即一个进程里可以包括多个微线程,使得当该进程的某个微线程遭遇IO阻塞时,可以调用其他微线程继续进行处理,因此,相对于现有技术方案而言,可以大大提升高并发时的应对能力,减少系统态的进程数,减少系统资源的占用,以及提高了上传性能。
实施例五
相应的,本发明实施例还提供一种文件上传系统,包括客户端,以及本发明实施例提供的任一种存储服务器,具体可参见实施例三,例如,可以如下:
客户端用于,当需要上传文件时,向存储服务器发送文件上传请求,文件上传请求中包括完整文件内容;
存储服务器用于,接收客户端发送的文件上传请求,解析所述文件上传请求,并将解析得到的数据流片段存入缓存;当所述缓存中存入的数据流片段的大小达到预设阈值时,调度进程里的微线程将缓存中的数据流片段写入存储模块,重复该步骤,直至将所述完整文件内容的所有数据流片段写入存储模块。
以上各个设备的具体实施可参见前面的实施例,在此不再赘述。
由于该文件上传系统可以包括本发明实施例提供的任一种存储服务器,因此,可以实现本发明实施例所提供的任一种存储服务器所能实现的有益效果。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,装置,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (16)
1.一种文件上传方法,其特征在于,包括:
接收客户端发送的文件上传请求,所述文件上传请求中包含完整文件内容;
解析所述文件上传请求,并将解析得到的数据流片段存入缓存;
当所述缓存中存入的数据流片段的大小达到预设阈值时,调度进程里的微线程将缓存中的数据流片段写入存储模块,重复该步骤,直至将所述完整文件内容的所有数据流片段写入存储模块。
2.根据权利要求1所述的方法,其特征在于,当所述缓存中存入的数据流片段的大小达到预设阈值时,所述方法还包括:
为缓存中的数据流片段添加序号,并创建存储索引。
3.根据权利要求2所述的方法,其特征在于,在调度进程里的微线程将缓存中的数据流片段写入存储模块之后,所述方法还包括:
判断是否写入成功;
若写入失败,则向所述客户端发送写入失败通知消息。
4.根据权利要求3所述的方法,其特征在于,在将所述完整文件内容的所有数据流片段写入存储模块之后,所述方法还包括:
根据所述存储索引查找所存储的对应的数据流片段;
根据所述序号将查找到的数据流片段合并起来组成所述完整文件内容。
5.根据权利要求1所述的方法,其特征在于,所述调度进程里的微线程将缓存中的数据流片段写入存储模块包括:
在进程里新建微线程;
将缓存中的数据流片段发送给新建的微线程,以利用新建的微线程将缓存中的数据流片段通过网络端口发往存储模块。
6.根据权利要求1所述的方法,其特征在于,所述调度进程里的微线程将缓存中的数据流片段写入存储模块包括:
从进程的线程池内选择空闲的微线程;
将缓存中的数据流片段发送给空闲的微线程,以利用空闲的微线程将缓存中的数据流片段通过网络端口发往存储模块。
7.根据权利要求1所述的方法,其特征在于,所述调度进程里的微线程将缓存中的数据流片段写入存储包括:
将缓存中的数据流片段发送给进程里的第一微线程,以使得所述第一微线程对缓存中的数据流片段进行逻辑处理;
接收所述第一微线程发送的经逻辑处理之后的数据流片段;
将经逻辑处理之后的数据流片段发送给进程里的第二微线程,以使得所述第二微线程将经逻辑处理之后的数据流片段通过网络端口发往存储模块。
8.根据权利要求7所述的方法,其特征在于,所述第一微线程与所述第二微线程在演进的轮询监听机制下被调度。
9.一种文件上传装置,其特征在于,包括:
接收单元,用于接收客户端发送的文件上传请求,所述文件上传请求中包含完整文件内容;
解析单元,用于解析所述文件上传请求,并将解析得到的数据流片段存入缓存;
调度单元,用于当所述缓存中存入的数据流片段的大小达到预设阈值时,调度进程里的微线程将缓存中的数据流片段写入存储模块,重复该步骤,直至将所述完整文件内容的所有数据流片段写入存储模块。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
添加单元,用于当所述缓存中存入的数据流片段的大小达到预设阈值时,为缓存中的数据流片段添加序号,并创建存储索引。
11.根据权利要求10所述的装置,其特征在于,所述装置还包括:
判断单元,用于在所述调度单元调度进程里的微线程将缓存中的数据流片段写入存储模块之后,判断是否写入成功;
通知单元,用于在写入失败时,向所述客户端发送写入失败通知消息。
12.根据权利要求11所述的装置,其特征在于,所述装置还包括:
合并单元,用于在所述完整文件内容的所有数据流片段写入存储模块之后,根据所述存储索引查找所存储的对应的数据流片段,根据所述序号将查找到的数据流片段合并起来组成所述完整文件内容。
13.根据权利要求9所述的装置,其特征在于,所述调度单元包括:
创建子单元,用于在进程里新建微线程;
第一发送子单元,用于将缓存中的数据流片段发送给新建的微线程,以利用新建的微线程将缓存中的数据流片段通过网络端口发往存储模块。
14.根据权利要求9所述的装置,其特征在于,所述调度单元包括:
选择子单元,用于从进程的线程池内选择空闲的微线程;
第二发送子单元,用于将缓存中的数据流片段发送给空闲的微线程,以利用空闲的微线程将缓存中的数据流片段通过网络端口发往存储模块。
15.根据权利要求9所述的装置,其特征在于,所述调度单元包括:
第三发送子单元,用于将缓存中的数据流片段发送给进程里的第一微线程,以使得所述第一微线程对缓存中的数据流片段进行逻辑处理;
接收子单元,用于接收所述第一微线程发送的经逻辑处理之后的数据流片段;
第四发送子单元,用于将经逻辑处理之后的数据流片段发送给进程里的第二微线程,以使得所述第二微线程将经逻辑处理之后的数据流片段通过网络端口发往存储模块。
16.根据权利要求15所述的装置,其特征在于,所述第一微线程与所述第二微线程在演进的轮询监听机制下被调度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610852953.XA CN107743137B (zh) | 2016-09-27 | 2016-09-27 | 一种文件上传方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610852953.XA CN107743137B (zh) | 2016-09-27 | 2016-09-27 | 一种文件上传方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107743137A true CN107743137A (zh) | 2018-02-27 |
CN107743137B CN107743137B (zh) | 2020-03-17 |
Family
ID=61235116
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610852953.XA Active CN107743137B (zh) | 2016-09-27 | 2016-09-27 | 一种文件上传方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107743137B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109451051A (zh) * | 2018-12-18 | 2019-03-08 | 百度在线网络技术(北京)有限公司 | 服务请求处理方法、装置、电子设备及存储介质 |
CN110321445A (zh) * | 2019-07-04 | 2019-10-11 | 上海融客软件科技有限公司 | 特征自定义方法、装置、特征库形成方法、电子终端 |
CN111367880A (zh) * | 2020-02-05 | 2020-07-03 | 北京华电天仁电力控制技术有限公司 | 一种通用实时数据存储管理系统及其实现方法 |
CN111711669A (zh) * | 2020-05-29 | 2020-09-25 | 北京顺达同行科技有限公司 | 一种数据上传方法、装置、服务器及存储介质 |
CN112422688A (zh) * | 2020-11-20 | 2021-02-26 | 常州微亿智造科技有限公司 | 质检图片传输方法、装置及服务器 |
CN113553346A (zh) * | 2021-07-22 | 2021-10-26 | 中国电子科技集团公司第十五研究所 | 大规模实时数据流一体化处理、转发和存储方法及系统 |
CN113965561A (zh) * | 2021-10-20 | 2022-01-21 | 中电科航空电子有限公司 | 一种基于异步事件驱动的机载文件传输系统 |
CN117632198A (zh) * | 2024-01-26 | 2024-03-01 | 深圳乐木骆科技有限公司 | 固件升级方法、设备、存储介质及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102546755A (zh) * | 2011-12-12 | 2012-07-04 | 华中科技大学 | 云存储系统的数据存储方法 |
CN103605568A (zh) * | 2013-10-29 | 2014-02-26 | 北京奇虎科技有限公司 | 一种多线程管理方法及装置 |
CN104077368A (zh) * | 2014-06-18 | 2014-10-01 | 国电南瑞科技股份有限公司 | 一种调度监控系统历史数据两级缓存多阶段提交方法 |
US9112943B1 (en) * | 2012-04-06 | 2015-08-18 | Samsung Research America, Inc. | System and method for retrieving, storing and distributing digital broadcast media in a cloud-computing environment |
CN105516305A (zh) * | 2015-12-07 | 2016-04-20 | 国云科技股份有限公司 | 一种基于二进制方式跨域高效上传文件的方法 |
-
2016
- 2016-09-27 CN CN201610852953.XA patent/CN107743137B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102546755A (zh) * | 2011-12-12 | 2012-07-04 | 华中科技大学 | 云存储系统的数据存储方法 |
US9112943B1 (en) * | 2012-04-06 | 2015-08-18 | Samsung Research America, Inc. | System and method for retrieving, storing and distributing digital broadcast media in a cloud-computing environment |
CN103605568A (zh) * | 2013-10-29 | 2014-02-26 | 北京奇虎科技有限公司 | 一种多线程管理方法及装置 |
CN104077368A (zh) * | 2014-06-18 | 2014-10-01 | 国电南瑞科技股份有限公司 | 一种调度监控系统历史数据两级缓存多阶段提交方法 |
CN105516305A (zh) * | 2015-12-07 | 2016-04-20 | 国云科技股份有限公司 | 一种基于二进制方式跨域高效上传文件的方法 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109451051A (zh) * | 2018-12-18 | 2019-03-08 | 百度在线网络技术(北京)有限公司 | 服务请求处理方法、装置、电子设备及存储介质 |
CN110321445A (zh) * | 2019-07-04 | 2019-10-11 | 上海融客软件科技有限公司 | 特征自定义方法、装置、特征库形成方法、电子终端 |
CN111367880A (zh) * | 2020-02-05 | 2020-07-03 | 北京华电天仁电力控制技术有限公司 | 一种通用实时数据存储管理系统及其实现方法 |
CN111711669A (zh) * | 2020-05-29 | 2020-09-25 | 北京顺达同行科技有限公司 | 一种数据上传方法、装置、服务器及存储介质 |
CN112422688A (zh) * | 2020-11-20 | 2021-02-26 | 常州微亿智造科技有限公司 | 质检图片传输方法、装置及服务器 |
CN113553346A (zh) * | 2021-07-22 | 2021-10-26 | 中国电子科技集团公司第十五研究所 | 大规模实时数据流一体化处理、转发和存储方法及系统 |
CN113965561A (zh) * | 2021-10-20 | 2022-01-21 | 中电科航空电子有限公司 | 一种基于异步事件驱动的机载文件传输系统 |
CN113965561B (zh) * | 2021-10-20 | 2023-08-25 | 中电科航空电子有限公司 | 一种基于异步事件驱动的机载文件传输系统 |
CN117632198A (zh) * | 2024-01-26 | 2024-03-01 | 深圳乐木骆科技有限公司 | 固件升级方法、设备、存储介质及装置 |
CN117632198B (zh) * | 2024-01-26 | 2024-05-07 | 深圳乐木骆科技有限公司 | 固件升级方法、设备、存储介质及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107743137B (zh) | 2020-03-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107743137A (zh) | 一种文件上传方法及装置 | |
CN104639672B (zh) | 进行域名解析的方法和装置 | |
CN106331213B (zh) | 一种域名系统dns处理方法及装置 | |
CN105005909A (zh) | 预测流失用户的方法及装置 | |
CN106708554B (zh) | 程序运行方法及装置 | |
CN106162316A (zh) | 一种视频流的数据处理方法、装置和系统 | |
WO2014169677A1 (en) | Method and device for extracting message format | |
CN106453692B (zh) | 一种域名解析方法、装置和系统 | |
CN103678502B (zh) | 信息收藏方法和装置 | |
CN104616138A (zh) | 资源转移方法、系统及装置 | |
CN104519262A (zh) | 获取视频数据的方法、装置及终端 | |
CN106330682A (zh) | 即时通信应用的消息处理方法及移动终端 | |
CN104679381A (zh) | 切换聊天窗口的方法及装置 | |
CN103543988A (zh) | 队列消息的处理方法、控制消息进入队列的方法及装置 | |
CN104216915A (zh) | 网页处理方法、装置和终端设备 | |
CN105302452A (zh) | 一种基于手势交互的操作方法及装置 | |
CN104104711A (zh) | 阅读历史处理方法和装置 | |
CN106775194A (zh) | 一种应用界面切换方法及装置 | |
CN104965642A (zh) | 下拉列表生成方法及装置 | |
CN103793267B (zh) | 队列的访问方法及装置 | |
CN110032429A (zh) | 信息处理方法、装置、移动终端及计算机可读存储介质 | |
CN108270839B (zh) | 访问频率控制系统及方法 | |
CN103823851B (zh) | 网页显示方法和装置 | |
CN104238931A (zh) | 信息输入方法、装置及电子设备 | |
CN104683215A (zh) | 一种即时通信工具的通信方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |