CN113315841A - 文件上传方法、装置、介质及电子设备 - Google Patents

文件上传方法、装置、介质及电子设备 Download PDF

Info

Publication number
CN113315841A
CN113315841A CN202110603687.8A CN202110603687A CN113315841A CN 113315841 A CN113315841 A CN 113315841A CN 202110603687 A CN202110603687 A CN 202110603687A CN 113315841 A CN113315841 A CN 113315841A
Authority
CN
China
Prior art keywords
file
memory
sdk
uploaded
uploading
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.)
Withdrawn
Application number
CN202110603687.8A
Other languages
English (en)
Inventor
杨勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ping An Technology Shenzhen Co Ltd
Original Assignee
Ping An Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Ping An Technology Shenzhen Co Ltd filed Critical Ping An Technology Shenzhen Co Ltd
Priority to CN202110603687.8A priority Critical patent/CN113315841A/zh
Publication of CN113315841A publication Critical patent/CN113315841A/zh
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/06Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • H04L67/025Protocols based on web technology, e.g. hypertext transfer protocol [HTTP] for remote control or remote monitoring of applications
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Environmental & Geological Engineering (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请涉及软件开发领域,揭示了一种基于文件上传方法、装置、介质及电子设备。该方法包括:监听SDK的版本状态信息;根据版本状态信息判断SDK是否发生过更新;在判断SDK发生过更新的情况下,创建若干线程;对各线程进行初始化,以将本地磁盘中的多个待上传文件以文件流的方式缓存到内存中,其中,每当对一个线程进行初始化时,将本地磁盘中的一个待上传文件以文件流的方式缓存到内存中;从内存中读取各文件流,并利用SDK将文件流上传至所述云服务器。此方法下,可以使得文件的上传效率不再受到磁盘的IO速度的限制,提高了文件上传速度,能够在SDK更新之后对云存储服务进行性能测试。

Description

文件上传方法、装置、介质及电子设备
技术领域
本申请涉及软件开发技术领域,特别涉及一种文件上传方法、装置、介质及电子设备。
背景技术
随着云存储的广泛使用,越来越多的企业与个人用户选择将数据存储至云存储***,云存储***的性能成为用户选择云存储产品时关注的焦点。目前,云存储***的上传方式就是从本地磁盘中读取文件再上传到云存储。然而,用户常常有通过并发的方式上传多个文件的需求,此时,若采用现有的上传方式将文件上传到云存储***,文件的上传效率会受限于磁盘的IO速度,导致文件上传效率低下;在此基础上,若对云存储***进行性能测试,测试结果的准确性差。
发明内容
在软件开发技术领域,为了解决上述技术问题,本申请的目的在于提供一种文件上传方法、装置、介质及电子设备。
根据本申请的一方面,提供了一种文件上传方法,所述方法包括:
监听SDK的版本状态信息,其中,所述SDK用于调用云服务器上的云存储服务;
根据所述版本状态信息判断所述SDK是否发生过更新;
在判断所述SDK发生过更新的情况下,创建若干线程;
对各线程进行初始化,以将本地磁盘中的多个待上传文件以文件流的方式缓存到内存中,其中,每当对一个线程进行初始化时,将本地磁盘中的一个待上传文件以文件流的方式缓存到内存中;
从所述内存中读取各文件流,并利用所述SDK将所述文件流上传至所述云服务器。
根据本申请的另一方面,提供了一种文件上传装置,所述装置包括:
监听模块,被配置为监听SDK的版本状态信息,其中,所述SDK用于调用云服务器上的云存储服务;
判断模块,被配置为根据所述版本状态信息判断所述SDK是否发生过更新;
创建模块,被配置为在判断所述SDK发生过更新的情况下,创建若干线程;
缓存模块,被配置为对各线程进行初始化,以将本地磁盘中的多个待上传文件以文件流的方式缓存到内存中,其中,每当对一个线程进行初始化时,将本地磁盘中的一个待上传文件以文件流的方式缓存到内存中;
读取和上传模块,被配置为从所述内存中读取各文件流,并利用所述SDK将所述文件流上传至所述云服务器。
根据本申请的另一方面,提供了一种计算机可读程序介质,其存储有计算机程序指令,当所述计算机程序指令被计算机执行时,使计算机执行如前所述的方法。
根据本申请的另一方面,提供了一种电子设备,所述电子设备包括:
处理器;
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,实现如前所述的方法。
本申请的实施例提供的技术方案可以包括以下有益效果:
对于本申请所提供的文件上传方法、装置、介质及电子设备,该方法包括如下步骤:监听SDK的版本状态信息,其中,所述SDK用于调用云服务器上的云存储服务;根据所述版本状态信息判断所述SDK是否发生过更新;在判断所述SDK发生过更新的情况下,创建若干线程;对各线程进行初始化,以将本地磁盘中的多个待上传文件以文件流的方式缓存到内存中,其中,每当对一个线程进行初始化时,将本地磁盘中的一个待上传文件以文件流的方式缓存到内存中;从所述内存中读取各文件流,并利用所述SDK将所述文件流上传至所述云服务器。此方法下,通过先将磁盘中的待上传文件以文件流的方式读入内存中,再通过读取内存中的文件流进行文件上传,由于从内存中读取缓存数据的效率要远远高于每次上传时从磁盘中读取文件的IO速度,这样使得文件的上传效率不再受到磁盘的IO速度的限制,提高了文件上传速度;另外,当本申请实施例应用于对云存储服务进行性能测试的场景中时,可以避免测试结果受到磁盘的IO速度的限制,从而提高性能测试的准确性;并且,还能够在SDK更新之后及时对云存储服务进行性能测试,保证了SDK更新之后云存储服务的性能能够满足要求。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是根据一示例性实施例示出的一种文件上传方法的***架构示意图;
图2是根据一示例性实施例示出的一种文件上传方法的流程图;
图3是根据图2实施例示出的一实施例的步骤240的细节的流程图;
图4是根据图2实施例示出的一实施例的步骤260之前步骤以及步骤260的细节的流程图;
图5是根据一示例性实施例示出的一种文件上传装置的框图;
图6是根据一示例性实施例示出的一种实现上述文件上传方法的电子设备示例框图;
图7是根据一示例性实施例示出的一种实现上述文件上传方法的程序产品。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
此外,附图仅为本申请的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。
本申请首先提供了一种文件上传方法。本申请提供的一种文件上传方法是通过网络将在本地磁盘存储的文件上传至服务端的方法,这里的文件可以是各种格式的文件,比如可以是文档文件、程序文件、视频文件、音频文件等。本申请提供的一种文件上传方法可以用于各种***中的文件上传操作,比如可以是Linux***、Windows***等。
本申请的实施终端可以是任何具有运算、存储以及通信功能的设备,该设备可以与外部设备相连,用于接收或者发送数据,具体可以是便携移动设备,例如智能手机、平板电脑、笔记本电脑、PDA(Personal Digital Assistant)等,也可以是固定式设备,例如,计算机设备、现场终端、台式电脑、服务器、工作站等,还可以是多个设备的集合,比如云计算的物理基础设施或者服务器集群。
可选地,本申请的实施终端可以为笔记本电脑或者台式计算机。
图1是根据一示例性实施例示出的一种文件上传方法的***架构示意图。如图1所示,该***架构包括个人计算机110、网络120和云服务器130,个人计算机110通过网络120与云服务器130相连。通过网络120,个人计算机110可以接收来自云服务器130的数据,也可以向云服务器130发送数据。在本申请实施例中,个人计算机110为执行终端,个人计算机110上具有本地磁盘和内存,个人计算机110上部署有嵌入了SDK的客户端;云服务器130也可以具有本地磁盘和内存,可以存储由个人计算机110上传的数据,云服务器130上还部署了云存储服务。当本申请提供的一种文件上传方法应用于图1所示的***架构中时,一个具体过程可以如下:首先,监听SDK的版本状态信息;然后,个人计算机110的本地磁盘中存储了若干待上传文件,当根据版本状态信息判断SDK发生过更新时,需要进行文件上传,此时会在个人计算机110上创建若干线程;接着,个人计算机110在对线程进行初始化时,会以文件流的方式将本地磁盘中存储的待上传文件缓存到内存中;最后,个人计算机110会从内存中读取文件流,并利用SDK将文件流上传至云服务器130中;基于此,可以实现对云存储服务的测试。
值得一提的是,图1仅为本申请的一个实施例。虽然在本实施例中的执行终端为个人计算机并且接收待上传文件的终端为服务器,但在本申请的其他实施例中,执行终端和接收待上传文件的终端均可以为如前所述的各种终端。虽然在本申请实施例中,接收待上传文件的终端为一个云服务器,但在本申请的其他实施例或者具体应用中,接收待上传文件的终端还可以为由多个云服务器组成的云服务器集群。本申请对此不作任何限定,本申请的保护范围也不应因此而受到任何限制。
图2是根据一示例性实施例示出的一种文件上传方法的流程图。本实施例提供的文件上传方法可以由台式计算机执行,如图2所示,包括以下步骤:
步骤210,监听SDK的版本状态信息。
其中,所述SDK用于调用云服务器上的云存储服务。
版本状态信息可以是版本号,SDK嵌入在客户端中。
步骤220,根据所述版本状态信息判断所述SDK是否发生过更新。
每当SDK进行版本更新,新的版本号可以写入到本地日志中;可以通过定期读取本地日志来判断版本号是否发生过变化,进而可以判断SDK是否发生过更新。
步骤230,在判断所述SDK发生过更新的情况下,创建若干线程。
本申请实施例的文件上传方法可以用于对云存储服务进行性能测试的场景。
因此,在本申请实施例中,每当SDK发生过更新时,能够自动对SDK调用云存储服务实现性能测试,保证了SDK更新之后云存储服务的性能能够满足要求。
线程(英语:thread)是操作***能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
比如,在基于java语言编写的程序中,可以利用new关键字创建线程对象。
在本申请的一个实施例中,在监听SDK的版本状态信息之前,所述方法还包括:
获取当前设备的内存使用率和/或CPU使用率;
根据所述内存使用率和/或所述CPU使用率判断所述当前设备是否处于空闲状态,其中,所述监听SDK的版本状态信息的步骤是当判断所述当前设备处于空闲状态时执行的。
在本申请实施例中,只有在当前设备处于空闲状态时才执行监听SDK的版本状态信息以及之后的文件上传的步骤,从而,能够确保文件上传可以充分利用当前设备的资源,进而可以提高文件上传的效率,此外,还可以减少当前设备的负荷;当本申请实施例的文件上传方法用于对云存储服务进行性能测试时,可以使测试过程不受设备资源的限制,因而可以使得测试结果更加准确。
当前设备的内存使用率和/或CPU使用率可以通过调用当前设备的***提供的接口来获取。
可以根据内存使用率、CPU使用率中的任意一项或两项来判断当前设备是否处于空闲状态。
比如,可以设置内存使用率阈值和CPU使用率阈值。可以根据下列条件之一来判断当前设备处于空闲状态:内存使用率小于内存使用率阈值、CPU使用率小于CPU使用率阈值、内存使用率小于内存使用率阈值且CPU使用率小于CPU使用率阈值、内存使用率小于内存使用率阈值或CPU使用率小于CPU使用率阈值。
在本申请的一个实施例中,所述根据所述内存使用率和/或所述CPU使用率判断所述当前设备是否处于空闲状态,包括:
根据预定权重,获取所述内存使用率和/或所述CPU使用率的加权和;
若所述加权和小于预定加权和阈值,则判断所述当前设备处于空闲状态;
若所述加权和达到预定加权和阈值,则判断所述当前设备不处于空闲状态。
步骤240,对各线程进行初始化,以将本地磁盘中的多个待上传文件以文件流的方式缓存到内存中。
其中,每当对一个线程进行初始化时,将本地磁盘中的一个待上传文件以文件流的方式缓存到内存中。
当对线程进行初始化操作时,会利用各线程从本地磁盘中读取待上传文件,并将读取到的待上传文件以文件流的方式缓存到内存中。每个线程能够完成对一个待上传文件的读取和缓存操作。
本地磁盘可以是机械硬盘,也可以是固态硬盘,还可以是其他类型的磁盘。
在本申请的一个实施例中,在对各线程进行初始化,以将本地磁盘中的多个待上传文件以文件流的方式缓存到内存中之前,所述方法还包括:
获取多个待上传文件,并将所述多个待上传文件存储至本地磁盘中。
具体而言,可以通过多种方式获取待上传文件,比如,可以通过互联网下载得到待上传文件,也可以通过从U盘等移动介质中进行数据转移而得到待上传文件。
各个待上传文件的文件大小、文件格式等参数可以相同,也可以不同。
图3是根据图2实施例示出的一实施例的步骤240的细节的流程图。如图3所示,步骤240具体可以包括以下步骤:
步骤241,当对目标待上传文件进行缓存时,判断所述内存中是否存在所述目标待上传文件的文件流。
在Java程序中,对数据的输入和输出操作以流的方式进行,流位于数据源和数据目的地之间。Java提供了各种各样的“流”类;流是一个抽象、动态的概念,是一连串连续动态的数据集合。
也就是说,如果要对一个待上传文件进行缓存,首先需要判断内存中是否存在该目标待上传文件的文件流。具体而言,可以依据目标待上传文件的文件名判断内存中是否存在与该目标待上传文件对应的文件流。
步骤242,如果所述内存中不存在所述目标待上传文件的文件流,则将所述本地磁盘中的目标待上传文件以文件流的方式缓存到内存中。
如果所述内存中存在所述目标待上传文件的文件流,则将所述本地磁盘中的所述目标待上传文件之外的其他待上传文件以文件流的方式缓存到内存中。
如果在对一个待上传文件进行缓存时,不考虑内存中是否已经存在目标待上传文件的文件流,那么,如果内存中已经存在目标待上传文件的文件流,会导致同一个待上传文件被重复初始化进行内存的情况,不仅消耗了额外的内存资源,也降低了文件上传效率;在本申请实施例中,当一个待上传文件的文件流已存在于内存中时,不会再次将该待上传文件从本地磁盘读取到内存中,从而降低了内存消耗。
在本申请的一个实施例中,在判断所述内存中是否存在所述目标待上传文件的文件流之前,所述方法还包括:
判断所述线程的数量是否超过所述待上传文件的数量,其中,在所述线程的数量超过所述待上传文件的数量的情况下,执行判断所述内存中是否存在目标待上传文件的文件流的过程。
当并发的线程数小于待上传的文件个数时,在内存中就不会出现相同文件被多次初始化进内存的情况;然而,当并发的线程数大于待上传的文件个数时,就会出现同一个文件被重复初始化进内存的情况,造成内存的大量浪费,本申请实施例中,提前对线程数与待上传的文件个数之间的数量关系进行了判断,从而能够提前跳过对待上传文件的文件流是否已存在于内存中的判断。
步骤260,从所述内存中读取各文件流,并利用所述SDK将所述文件流上传至所述云服务器。
当各待上传文件的文件流被缓存到内存之后,便可以通过对文件流进行读取来进行文件流的上传。如前所述,SDK用于调用云服务器上的云存储服务,因此,基于SDK可以将文件流上传至云服务器。
图4是根据图2实施例示出的一实施例的步骤260之前步骤以及步骤260的细节的流程图。请参见图4,包括以下步骤:
步骤250,获取所述内存中各文件流对应的文件标识。
文件标识可以是各种能够用于标识一个文件的信息,比如可以是文件名称。不同文件流对应的文件标识不同。
步骤260',根据获取到的文件标识,利用所述SDK依次从所述内存中读取各文件流,并将所述文件流上传至所述云服务器。
如果随机从内存中读取文件流,而不对每次读取的文件流加以区分,那么可能会出现一个文件流被重复读取的情况。本申请实施例中,通过依据文件标识依次读取文件流,避免了文件流被重复读取,使内存不会被浪费,在性能测试场景下,能够保证性能测试结果的有效性。
本申请实施例提供的文件上传方法具体可以应用于对云存储服务进行性能测试的场景中。对云存储性能评估的重要场景是文件上传的性能测试。云存储一般会提供两种文件上传方式的接口,分别是普通文件上传接口与流文件上传接口。使用普通文件上传接口进行上传,就是从本地磁盘中读取文件再上传到云存储,高并发下,磁盘的IO就会是性能测试的瓶颈。而选择高并发调用云存储的流文件上传接口进行上传,则是把文件转换为流的形式进行上传,但这种方式下,不是每个线程都能到本地磁盘中读取源文件,因此,这样还是存在磁盘IO的问题。因此,当本申请实施例提供的文件上传方法应用于对云存储服务进行性能测试的场景中时,可以避免性能测试结果受到磁盘的IO性能的限制。
具体而言,用户一般使用SDK的方式调用云存储服务,因而,对云存储服务的性能评估可以采用在JMETER下基于JAVA SDK调用云存储服务来完成,在JMETER下使用JAVA脚本调用云存储进而可以实现性能测试。JMETER是基于Java的压力测试工具,其用于对软件做压力测试,即性能测试。
在本申请的一个实施例中,在从所述内存中读取各文件流,并利用所述SDK将所述文件流上传至所述云服务器之后,所述方法还包括:
获取各待上传文件在上传过程中的平均延迟时间。
具体来说,将编写好的测试用JAVA脚本导入至JMETER框架中,利用JMETER框架可以输出各种所需的测试结果,比如可以是平均延迟时间,当然还可以是其他的测试指标。
本申请实施例中,对将文件上传至云存储服务实现了性能测试,在高并发场景下,避免了因磁盘的IO限制而影响性能测试的最终结果。
在本申请的一个实施例中,在获取各待上传文件在上传过程中的平均延迟时间之后,所述方法还包括:
若所述平均延迟时间大于预定阈值,则输出对应的告警信息。
告警信息可以通过弹窗等方式输出,通过输出告警信息,使得测试人员可以及时掌握云存储服务发生故障的情况,从而能够及时进行故障处理,避免损失进一步扩大。
在本申请的一个实施例中,在获取各待上传文件在上传过程中的平均延迟时间之后,所述方法还包括:
获取利用其他设备进行测试所获得的平均延迟时间,所述其他设备是当前设备之外的设备;
对各设备对应的平均延迟时间进行排序,并输出排序结果。
具体而言,排序结果中可以对应显示设备标识、设备在进行测试时的可用内存大小以及设备对应的平均延迟时间。
在本实施例中,通过输出平均延迟时间的排序结果,使得测试人员可以直观地比对测试结果在各设备之间的区别,从而可以帮助发现测试所反映出的设备问题。用户通常使用嵌入了SDK的客户端来调用云存储服务,当本申请实施例提供的文件上传方法应用于对云存储服务进行性能测试的场景中时,当前设备也就是对云存储服务进行性能测试的设备,当前设备上除了部署嵌入了SDK的客户端之外,还部署了JMETER。通过在JMETER下基于JAVA SDK客户端调用云存储服务实现性能测试的流程如下:
(1)首先,准备用于对云存储的上传进行性能测试的文件素材,比如准备50个800M的大文件,文件保存在当前设备的本地磁盘上。
(2)接着,需要将这50个800M大小的文件初始化保存在内存中,具体来说,在JMETER框架下的JAVA SDK中新创建一个InputStreamCacherMap类,负责进行文件流的缓存和获取。
InputStreamCacherMap类的部分代码可以如下所示:
Figure BDA0003093507390000101
其中,InputStream代表输入流,InputStream的实质是以字节为单位来获取数据的字节流。add是将文件写入到内存中,实现文件缓存的方法,get是通过获取文件流对应的文件名称来实现获取文件流的方法。contains是判断内存中是否存在待上传文件对应的文件流的方法。
对线程进行初始化操作,即将文件初始化进行内存中,是通过Java脚本中的setupTest方法实现的,setupTest方法的部分代码可以如下所示:
Figure BDA0003093507390000102
Figure BDA0003093507390000111
可以看到,在setupTest方法中,调用了InputStreamCacherMap类中的contains方法和add方法。由于当并发的线程数小于待上传的文件个数时,在内存中就不会出现相同文件被多次初始化进内存的情况;但当并发的线程数大于待上传的文件个数时,就会出现同一个文件被重复初始化进内存的情况,造成对内存出现大量浪费。本实施例通过在InputStreamCacherMap类中增加了一个判断内存中的文件流是否存在的方法,即contains方法,这样对每一个线程在进行文件初始化到内存中时,增加判断一个文件对应的文件流在内存中是否存在的过程。如果没有存在,则把文件初始化进内存,如果存在就不再进行初始化文件到内存的操作。这样就确保了最多只会把与待上传文件个数相同的文件初始化进内存,大大降低了内存消耗。通过调用add方法,实现了将文件初始化进行内存中。
(3)最后,读取文件流,对文件流进行并发上传,最终将这些文件上传至云存储服务一端。本步骤是通过Java脚本中的runTest方法实现的。runTest方法的部分代码可以如下所示:
Figure BDA0003093507390000112
在JMETER的Java脚本中的runTest步骤中,调用了InputStreamCacherMap类中的获取文件流的方法,即get方法,通过文件名称从内存中读取待上传的每一个文件流,从内存中读取缓存数据的效率要远远高于每次上传从磁盘中读取文件的IO,并且也保证了内存没有被重复浪费,保证了云存储性能测试数据的有效性。
由此可知,当本申请实施例提供的文件上传方法具体应用于对云存储服务进行性能测试的场景中时,通过在JMETER下的Java SDK客户端调用的框架中增加了文件缓存类的方法,将待上传文件以文件流的方式缓存到内存中,解决了SDK调用云存储上传文件时测试结果受限于本地磁盘IO的问题。通过在JMETER的Java SDK框架下增加了一个InputStreamCacherMap类,在进行setupTest操作时,将本地磁盘中的文件进行缓存到内存中,并增加了预防缓存文件重复的判断,保证了无论并发有多高,线程初始化操作的时候只把同一个文件初始化进内存一次。接下来在runTest操作时,通过文件名从内存中读取文件流,避免了在并发上传时从磁盘中读取文件再上传的操作,避免了磁盘IO的性能对云存储性能测试评估的影响。
在本申请的一个实施例中,所述平均延迟时间是每当所述SDK发生过一次更新后获取得到的,在获取各待上传文件在上传过程中的平均延迟时间之后,所述方法还包括:
对在每次所述SDK发生更新后获取得到的各平均延迟时间进行对比,并输出对比结果。
可以按照SDK更新时间的先后顺序对各版本SDK对应的平均延迟时间进行排序,也可以按照平均延迟时间的长短对各版本SDK对应的平均延迟时间进行排序。
虽然上述实施例中启动性能测试是基于一定的条件进行的,但在本申请的其他实施例中,性能测试可以不基于任何条件来进行,比如可以定期进行性能测试等。
在本申请的一个实施例中,对云存储服务进行性能测试所使用的各待上传文件的文件大小相同。通过利用大小相同的文件进行性能测试,避免了测试结果受到文件大小的影响,能够使得性能测试结果更准确。
综上所述,根据图2实施例提供的文件上传方法,通过先将磁盘中的待上传文件以文件流的方式读入内存中,再通过读取内存中的文件流进行文件上传,由于从内存中读取缓存数据的效率要远远高于每次上传时从磁盘中读取文件的IO速度,这样使得文件的上传效率不再受到磁盘的IO速度的限制,提高了文件上传速度;另外,当本申请实施例应用于对云存储服务进行性能测试的场景中时,可以避免测试结果受到磁盘的IO速度的限制,从而提高性能测试的准确性;并且,还能够在SDK更新之后及时对云存储服务进行性能测试,保证了SDK更新之后云存储服务的性能能够满足要求。
本申请还提供了一种文件上传装置,以下是本申请的装置实施例。
图5是根据一示例性实施例示出的一种文件上传装置的框图。如图5所示,装置500包括:
监听模块510,被配置为监听SDK的版本状态信息,其中,所述SDK用于调用云服务器上的云存储服务;
判断模块520,被配置为根据所述版本状态信息判断所述SDK是否发生过更新;
创建模块530,被配置为在判断所述SDK发生过更新的情况下,创建若干线程;
缓存模块540,被配置为对各线程进行初始化,以将本地磁盘中的多个待上传文件以文件流的方式缓存到内存中,其中,每当对一个线程进行初始化时,将本地磁盘中的一个待上传文件以文件流的方式缓存到内存中;
读取和上传模块550,被配置为从所述内存中读取各文件流,并利用所述SDK将所述文件流上传至所述云服务器。
根据本申请的第三方面,还提供了一种能够实现上述方法的电子设备。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为***、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“***”。
下面参照图6来描述根据本发明的这种实施方式的电子设备600。图6显示的电子设备600仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图6所示,电子设备600以通用计算设备的形式表现。电子设备600的组件可以包括但不限于:上述至少一个处理单元610、上述至少一个存储单元620、连接不同***组件(包括存储单元620和处理单元610)的总线630。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元610执行,使得所述处理单元610执行本说明书上述“实施例方法”部分中描述的根据本发明各种示例性实施方式的步骤。
存储单元620可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)621和/或高速缓存存储单元622,还可以进一步包括只读存储单元(ROM)623。
存储单元620还可以包括具有一组(至少一个)程序模块625的程序/实用工具624,这样的程序模块625包括但不限于:操作***、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线630可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、***总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备600也可以与一个或多个外部设备800(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备600交互的设备通信,和/或与使得该电子设备600能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口650进行,比如与显示单元640通信。并且,电子设备600还可以通过网络适配器660与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器660通过总线630与电子设备600的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备600使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID***、磁带驱动器以及数据备份存储***等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本申请实施方式的方法。
根据本申请的第四方面,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。
参考图7所示,描述了根据本发明的实施方式的用于实现上述方法的程序产品700,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
此外,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围执行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

Claims (10)

1.一种文件上传方法,其特征在于,所述方法包括:
监听SDK的版本状态信息,其中,所述SDK用于调用云服务器上的云存储服务;
根据所述版本状态信息判断所述SDK是否发生过更新;
在判断所述SDK发生过更新的情况下,创建若干线程;
对各线程进行初始化,以将本地磁盘中的多个待上传文件以文件流的方式缓存到内存中,其中,每当对一个线程进行初始化时,将本地磁盘中的一个待上传文件以文件流的方式缓存到内存中;
从所述内存中读取各文件流,并利用所述SDK将所述文件流上传至所述云服务器。
2.根据权利要求1所述的方法,其特征在于,所述对各线程进行初始化,以将本地磁盘中的多个待上传文件以文件流的方式缓存到内存中,包括:
当对目标待上传文件进行缓存时,判断所述内存中是否存在所述目标待上传文件的文件流;
如果所述内存中不存在所述目标待上传文件的文件流,则将所述本地磁盘中的目标待上传文件以文件流的方式缓存到内存中。
3.根据权利要求2所述的方法,其特征在于,在判断所述内存中是否存在所述目标待上传文件的文件流之前,所述方法还包括:
判断所述线程的数量是否超过所述待上传文件的数量,其中,在所述线程的数量超过所述待上传文件的数量的情况下,执行判断所述内存中是否存在目标待上传文件的文件流的过程。
4.根据权利要求1所述的方法,其特征在于,在从所述内存中读取各文件流,并利用所述SDK将所述文件流上传至所述云服务器之前,所述方法还包括:
获取所述内存中各文件流对应的文件标识;
所述从所述内存中读取各文件流,并利用所述SDK将所述文件流上传至所述云服务器,包括:
根据获取到的文件标识,利用所述SDK依次从所述内存中读取各文件流,并将所述文件流上传至所述云服务器。
5.根据权利要求1所述的方法,其特征在于,在从所述内存中读取各文件流,并利用所述SDK将所述文件流上传至所述云服务器之后,所述方法还包括:
获取各待上传文件在上传过程中的平均延迟时间。
6.根据权利要求5所述的方法,其特征在于,所述平均延迟时间是每当所述SDK发生过一次更新后获取得到的,在获取各待上传文件在上传过程中的平均延迟时间之后,所述方法还包括:
对在每次所述SDK发生更新后获取得到的各平均延迟时间进行对比,并输出对比结果。
7.根据权利要求1-6任意一项所述的方法,其特征在于,在监听SDK的版本状态信息之前,所述方法还包括:
获取当前设备的内存使用率和/或CPU使用率;
根据所述内存使用率和/或所述CPU使用率判断所述当前设备是否处于空闲状态,其中,所述监听SDK的版本状态信息的步骤是当判断所述当前设备处于空闲状态时执行的。
8.一种文件上传装置,其特征在于,所述装置包括:
监听模块,被配置为监听SDK的版本状态信息,其中,所述SDK用于调用云服务器上的云存储服务;
判断模块,被配置为根据所述版本状态信息判断所述SDK是否发生过更新;
创建模块,被配置为在判断所述SDK发生过更新的情况下,创建若干线程;
缓存模块,被配置为对各线程进行初始化,以将本地磁盘中的多个待上传文件以文件流的方式缓存到内存中,其中,每当对一个线程进行初始化时,将本地磁盘中的一个待上传文件以文件流的方式缓存到内存中;
读取和上传模块,被配置为从所述内存中读取各文件流,并利用所述SDK将所述文件流上传至所述云服务器。
9.一种计算机可读程序介质,其特征在于,其存储有计算机程序指令,当所述计算机程序指令被计算机执行时,使计算机执行根据权利要求1至7中任一项所述的方法。
10.一种电子设备,其特征在于,所述电子设备包括:
处理器;
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,实现如权利要求1至7任一项所述的方法。
CN202110603687.8A 2021-05-31 2021-05-31 文件上传方法、装置、介质及电子设备 Withdrawn CN113315841A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110603687.8A CN113315841A (zh) 2021-05-31 2021-05-31 文件上传方法、装置、介质及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110603687.8A CN113315841A (zh) 2021-05-31 2021-05-31 文件上传方法、装置、介质及电子设备

Publications (1)

Publication Number Publication Date
CN113315841A true CN113315841A (zh) 2021-08-27

Family

ID=77376580

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110603687.8A Withdrawn CN113315841A (zh) 2021-05-31 2021-05-31 文件上传方法、装置、介质及电子设备

Country Status (1)

Country Link
CN (1) CN113315841A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114827130A (zh) * 2022-04-24 2022-07-29 中国银行股份有限公司 一种文件上传方法及装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114827130A (zh) * 2022-04-24 2022-07-29 中国银行股份有限公司 一种文件上传方法及装置
CN114827130B (zh) * 2022-04-24 2024-04-16 中国银行股份有限公司 一种文件上传方法及装置

Similar Documents

Publication Publication Date Title
US11755452B2 (en) Log data collection method based on log data generated by container in application container environment, log data collection device, storage medium, and log data collection system
CN102708050B (zh) 移动应用测试方法和***
CN109672722B (zh) 数据部署方法及装置、计算机存储介质和电子设备
CN111221793B (zh) 数据挖掘方法、平台、计算机设备及存储介质
CN113886162B (zh) 一种计算设备性能测试方法、计算设备及存储介质
CN110688096B (zh) 包含插件的应用程序的构建方法、装置、介质及电子设备
CN115145777B (zh) 一种测试方法、***、装置及存储介质
CN113377665A (zh) 基于容器技术的测试方法、装置、电子设备及存储介质
CN113315841A (zh) 文件上传方法、装置、介质及电子设备
JP2023519774A (ja) 自動化テスト方法、装置、電子デバイス、記憶媒体、及びプログラム
US11366739B2 (en) Pipeline for validation process and testing
CN112463574A (zh) 软件测试方法、装置、***、设备和存储介质
US11366613B2 (en) Method and apparatus for writing data
CN111683140B (zh) 用于分发消息的方法和装置
CN112131095B (zh) 压力测试方法和装置
CN112559001B (zh) 更新应用的方法和装置
CN113760680A (zh) 一种***压力性能测试的方法和装置
CN112835759A (zh) 测试数据处理方法、装置、电子设备以及存储介质
CN112948141A (zh) 一种基于消息中间件的数据处理方法、装置和***
CN113342633B (zh) 一种性能测试方法和装置
CN114095494B (zh) 一种用于快速下载文件的方法和***
CN111008074B (zh) 一种文件处理方法、装置、设备和介质
CN115454827B (zh) 兼容性检测方法、***、设备和介质
US20230289354A1 (en) Endpoint scan and profile generation
US20240202207A1 (en) Distributed function data transformation system

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
WW01 Invention patent application withdrawn after publication

Application publication date: 20210827

WW01 Invention patent application withdrawn after publication