CN103701937A - 一种上传大文件的方法 - Google Patents
一种上传大文件的方法 Download PDFInfo
- Publication number
- CN103701937A CN103701937A CN201410015196.1A CN201410015196A CN103701937A CN 103701937 A CN103701937 A CN 103701937A CN 201410015196 A CN201410015196 A CN 201410015196A CN 103701937 A CN103701937 A CN 103701937A
- Authority
- CN
- China
- Prior art keywords
- file
- upload
- http
- webdav
- server
- 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.)
- Pending
Links
Images
Landscapes
- Information Transfer Between Computers (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种上传大文件的方法,该方法用于WEBDAV服务器,如果http服务器接收到WEBDAV服务器的上传请求,则判断上传文件的大小,如果上传文件的大小超过1M,则WEBDAV模块直接使用外部存储设备接收并储存上传文件。本发明对于大文件的上传用直接写外部存储介质的方法来代替原有的用物理内存暂存的方法,从而解决了上传文件大小受限的瓶颈问题。
Description
技术领域
本发明涉及一种上传大文件的方法,尤其涉及一种在WEBDAV服务器上实现上传大文件的方法。
背景技术
WEBDAV(Web-based Distributed Authoring and Versioning)是一种基于 HTTP 1.1协议的通信协议。它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可直接对Web 服务器直接读写,并支持写文件锁定及解锁,还可以支持文件的版本控制。
WEBDAV作为一种文件共享的方案,已经在网关设备的某些开源方案(openwrt)上开始应用。典型的应用场景为:网关设备上部署WEBDAV服务器,将外接的存储设备(移动硬盘)作为存储介质,PC(个人电脑)、手机等终端通过客户端或映射网络驱动器的方法,可以下载或上传文件,在用映射网络驱动器的方法连接时可以直接修改服务器上的文件。
Lighttpd(lighttpd是一个用C语言实现的轻量级的http服务器,HTTP(Hyper Text Transfer Protocol)即超文本传输协议,是目前网页传输的通用协议)是个框架,在这个框架下可以同时做多种服务,比如:建立一个WEBDAV的服务器用于共享文件,同时建立一个WEB服务器,用于管理网关设备,也可以再建立一个WEB服务器做BBS。
在网关设备上可以用http服务器加载WEBDAV模块的方式实现WEBDAV服务器。但在实际使用中,WEBDAV服务器不能上传较大的文件,32M内存的设备一般不能上传大于20M的文件。
http服务器处理上传文件请求的步骤如下:
1、先从socket(网络套接字)中接收http header(http header是http报文的头部。可以将http报文当成是一个连续的字符串,该字符串可以分为两部分:头部(字符串前面的一部分,长度不定)和内容(剩余的部分)。头部包含一些协议描述和控制的信息,内容部分是http协议需要传送的内容),根据上传请求的内容长度(Content-Length)字段的值获得接收文件的大小;
步骤2、对于小于等于64K的文件,直接分配一个内存缓存(buffer)来接收;对于大于64K小于等于1M的文件,在tmpfs(临时文件系统,是一种基于内存的文件系统,它只存在于内存中)中建立一个临时文件来存储;对于大于1M的文件,将文件分成以1M为单位的临时文件存储在临时文件中,并用链表将这些临时文件的信息保存起来;
步骤3、文件接收完成后,交给WEBDAV模块处理,WEBDAV模块将接收到的文件写入对应的外部存储介质中。
网关设备的剩余内存一般不会小于1M,所以对于1M左右的文件,一般都可以上传。但当文件很大时,由于临时文件都是存储在物理内存中的,所以当上传文件的大小大于系统剩余物理内存时,lighttpd最终会因内存不够而放弃接收该文件,导致上传失败。
现有的上传文件方案对上传文件的大小有限制,这是由原始设计的上传机制决定的,上传文件大小的上限为当前系统中剩余物理内存的大小。这就给实际应用带来了不便,尤其是无法上传视频文件。
目前业界还没有对应的解决方案。
发明内容
本发明提供一种上传大文件的方法,不受系统实际剩余物理内存的限制,实现对大文件的支持。
为了达到上述目的,本发明提供一种上传大文件的方法,该方法用于WEBDAV服务器,该方法包含以下步骤:
步骤S1、如果http服务器接收到WEBDAV服务器的上传请求,则判断上传文件的大小;
步骤S2、如果上传文件的大小超过1M,WEBDAV模块直接使用外部存储设备接收并储存上传文件。
所述的步骤S1中,http服务器根据接收到的http报文头部,判断是否是WEBDAV服务器的上传请求,如果是,就将在http连接上下文中扩充的标识变量赋值为真,表示http服务器要处理WEBDAV服务器的上传服务,如果不是,则将该标识变量赋值为假。
在上传文件的大小超过1M时,在WEBDAV模块直接使用外部存储设备接收并储存上传文件之前,还包括:http服务器先判断http连接上下文中扩充的标识变量的赋值,如果赋值为真,则WEBDAV模块直接使用外部存储设备接收并储存上传文件。
所述的http报文头部的内容包含超文本传送协议方法和请求路径。
所述的步骤S2中,外部存储设备为移动硬盘,或者电脑,或者手机。
所述的步骤S2中,WEBDAV模块直接使用外部存储设备储存上传文件的步骤包含以下步骤:
步骤S2.1、WEBDAV模块根据http报文头部中的请求路径确定上传文件在外部储存设备中的存储路径,在该路径下建立并打开一个文件名为“上传文件名+tmp”的临时文件,返回临时文件句柄;
步骤S2.2、http服务器从接收到的网络套接字socket中读取上传文件的内容,并根据返回的所述临时文字句柄将所述上传文件的内容写入所述临时文件中;
步骤S2.3、上传文件接收完成后,http服务器关闭临时文件句柄。
所述的步骤S2中,如果上传文件的大小未超过1M,则对于小于等于64K的文件,WEBDAV模块直接分配一个内存缓存来接收,对于大于64K小于等于1M的文件,WEBDAV模块在临时文件系统中建立一个临时文件来存储。
在执行步骤S2之后,所述的上传大文件的方法还包含:步骤S3、保存校验,即对所述上传文件进行保存,并对上传过程进行校验。
所述的步骤S3包含以下步骤:
步骤S3.1、上传文件接收完成后,WEBDAV模块判断所述上传文件的大小,对于小于等于1M的文件,WEBDAV模块直接将接收到的文件写入对应的外部存储设备中,对于大于1M的文件,进行步骤S3.2;
步骤S3.2、http服务器判断http连接上下文中扩充的标识变量的赋值,如果赋值为假,表示文件上传过程中出现系统或硬件错误,上传不成功,返回错误报告,如果赋值为真,进行步骤S3.3;
步骤S3.3、WEBDAV模块根据上传文件的文件名,在外部存储设备中的指定目录路径下查找对应的临时文件,如果临时文件不存在或临时文件的大小和上传请求中的内容长度不一致,则表明上传过程中出现系统或硬件错误,返回错误报告,如果临时文件存在且临时文件的大小和上传请求的内容长度一致,则将临时文件重命名为目标文件。
在将临时文件重命名为目标文件时,若外部存储设备中已存在与所述目标文件的文件名相同的文件,则先删除外部存储设备中已存在的与所述目标文件的文件名相同的文件,再将所述临时文件重命名为目标文件。
本发明对于大文件的上传用直接写外部存储介质的方法来代替原有的用物理内存暂存的方法,从而解决了上传文件大小受限的瓶颈问题。
附图说明
图1是本发明的流程图。
具体实施方式
以下根据图1,具体说明本发明的较佳实施例。
如图1所示,本发明提供一种实现WEBDAV服务器上传大文件的方法,该方法包含以下步骤:
步骤1、http服务器根据http报文头部中的超文本传送协议方法(http method)和请求路径,判断是否是WEBDAV服务器的上传请求,如果是,就将在http连接上下文中扩充的标识变量赋值为真,如果不是,则将该标识变量赋值为假;
步骤2、http服务器判断上传文件的大小,如果小于等于1M,进行步骤3,如果大于1M,进行步骤4;
步骤3、对于小于等于64K的文件,WEBDAV模块直接分配一个内存缓存(buffer)来接收,对于大于64K小于等于1M的文件,WEBDAV模块在临时文件系统tmpfs中建立一个临时文件来存储,进行步骤6;
步骤4、http服务器判断http连接上下文中扩充的标识变量的赋值,如果赋值为真,进行步骤5;
如果http连接上下文中扩充的标识变量赋值为真,表示http服务器要处理WEBDAV服务器的上传服务,如果http连接上下文中扩充的标识变量赋值为假,则表示http服务器不需要处理WEBDAV服务器的上传服务,http服务器保证其他服务(比如:用于管理网关设备的WEB服务器,用作BBS的WEB服务器等)的处理流程不变,保证其他服务的功能不受影响;
步骤5、WEBDAV模块直接使用外部存储设备储存上传文件;
该步骤5包含以下步骤:
步骤5.1、WEBDAV模块根据http报文头部中的请求路径确定上传文件在外部储存设备中的存储路径,在该路径下建立并打开一个文件名为“上传文件名+tmp”的临时文件,返回临时文件句柄;
步骤5.2、http服务器从接收到的网络套接字socket中读取上传文件的内容,并根据步骤5.1返回的所述临时文字句柄将所述上传文件的内容写入所述临时文件中;
步骤5.3、上传文件接收完成后,http服务器关闭临时文件句柄;
步骤6、上传文件接收完成后,WEBDAV模块判断上传文件的大小,如果小于等于1M,进行步骤7,如果大于1M,进行步骤8;
步骤7、WEBDAV模块直接将接收到的文件写入对应的外部存储设备中;
步骤8、http服务器判断http连接上下文中扩充的标识变量的赋值,如果赋值为真,进行步骤10,如果赋值为假,进行步骤9;
步骤9、表示文件上传过程中出现系统或硬件错误,上传不成功,返回错误报告;
步骤10、WEBDAV模块根据上传文件的文件名,在外部存储设备中的指定目录路径下查找对应的临时文件,如果临时文件不存在或临时文件的大小和上传请求中的内容长度不一致,则表明上传过程中出现系统或硬件错误,返回错误报告,如果临时文件存在且临时文件的大小和上传请求的内容长度一致,则将临时文件重命名为目标文件。
在将临时文件重命名为目标文件时,若外部存储设备中已存在与所述目标文件的文件名相同的文件,则先删除外部存储设备中已存在的与所述目标文件的文件名相同的文件,再将所述临时文件重命名为目标文件。
本发明对于大文件用写外部存储介质的方法来代替原有的用物理内存暂存的方法,从而解决了上传文件大小受限的瓶颈问题。
尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。
Claims (10)
1.一种上传大文件的方法,该方法用于WEBDAV服务器,其特征在于,该方法包含以下步骤:
步骤S1、如果http服务器接收到WEBDAV服务器的上传请求,则判断上传文件的大小;
步骤S2、如果上传文件的大小超过1M,WEBDAV模块直接使用外部存储设备接收并储存上传文件。
2.如权利要求1所述的上传大文件的方法,其特征在于,所述的步骤S1中,http服务器根据接收到的http报文头部,判断是否是WEBDAV服务器的上传请求,如果是,就将在http连接上下文中扩充的标识变量赋值为真,表示http服务器要处理WEBDAV服务器的上传服务,如果不是,则将该标识变量赋值为假。
3.如权利要求2所述的上传大文件的方法,其特征在于,在上传文件的大小超过1M时,在WEBDAV模块直接使用外部存储设备接收并储存上传文件之前,还包括:http服务器先判断http连接上下文中扩充的标识变量的赋值,如果赋值为真,则WEBDAV模块直接使用外部存储设备接收并储存上传文件。
4.如权利要求2所述的上传大文件的方法,其特征在于,所述的http报文头部的内容包含超文本传送协议方法和请求路径。
5.如权利要求1所述的上传大文件的方法,其特征在于,所述的步骤S2中,外部存储设备为移动硬盘,或者电脑,或者手机。
6.如权利要求1所述的上传大文件的方法,其特征在于,所述的步骤S2中,WEBDAV模块直接使用外部存储设备储存上传文件的步骤包含以下步骤:
步骤S2.1、WEBDAV模块根据http报文头部中的请求路径确定上传文件在外部储存设备中的存储路径,在该路径下建立并打开一个文件名为“上传文件名+tmp”的临时文件,返回临时文件句柄;
步骤S2.2、http服务器从接收到的网络套接字socket中读取上传文件的内容,并根据返回的所述临时文字句柄将所述上传文件的内容写入所述临时文件中;
步骤S2.3、上传文件接收完成后,http服务器关闭临时文件句柄。
7.如权利要求2所述的上传大文件的方法,其特征在于,所述的步骤S2中,如果上传文件的大小未超过1M,则对于小于等于64K的文件,WEBDAV模块直接分配一个内存缓存来接收,对于大于64K小于等于1M的文件,WEBDAV模块在临时文件系统中建立一个临时文件来存储。
8.如权利要求7所述的上传大文件的方法,其特征在于,在执行步骤S2之后,所述的上传大文件的方法还包含:步骤S3、保存校验,即对所述上传文件进行保存,并对上传过程进行校验。
9.如权利要求8所述的上传大文件的方法,其特征在于,所述的步骤S3包含以下步骤:
步骤S3.1、上传文件接收完成后,WEBDAV模块判断所述上传文件的大小,对于小于等于1M的文件,WEBDAV模块直接将接收到的文件写入对应的外部存储设备中,对于大于1M的文件,进行步骤S3.2;
步骤S3.2、http服务器判断http连接上下文中扩充的标识变量的赋值,如果赋值为假,表示文件上传过程中出现系统或硬件错误,上传不成功,返回错误报告,如果赋值为真,进行步骤S3.3;
步骤S3.3、WEBDAV模块根据上传文件的文件名,在外部存储设备中的指定目录路径下查找对应的临时文件,如果临时文件不存在或临时文件的大小和上传请求中的内容长度不一致,则表明上传过程中出现系统或硬件错误,返回错误报告,如果临时文件存在且临时文件的大小和上传请求的内容长度一致,则将临时文件重命名为目标文件。
10.如权利要求9所述的上传大文件的方法,其特征在于,在将临时文件重命名为目标文件时,若外部存储设备中已存在与所述目标文件的文件名相同的文件,则先删除外部存储设备中已存在的与所述目标文件的文件名相同的文件,再将所述临时文件重命名为目标文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410015196.1A CN103701937A (zh) | 2014-01-14 | 2014-01-14 | 一种上传大文件的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410015196.1A CN103701937A (zh) | 2014-01-14 | 2014-01-14 | 一种上传大文件的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103701937A true CN103701937A (zh) | 2014-04-02 |
Family
ID=50363331
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410015196.1A Pending CN103701937A (zh) | 2014-01-14 | 2014-01-14 | 一种上传大文件的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103701937A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109547566A (zh) * | 2018-12-25 | 2019-03-29 | 华南理工大学 | 一种基于内存分配的多线程上传优化方法 |
CN110278202A (zh) * | 2019-06-18 | 2019-09-24 | 南京科源信息技术有限公司 | 一种文件上传系统 |
CN112351111A (zh) * | 2020-12-30 | 2021-02-09 | 常州微亿智造科技有限公司 | 一种工业质检文件上传服务器端近实时进度监控方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101098265A (zh) * | 2006-06-30 | 2008-01-02 | 佛山市顺德区顺达电脑厂有限公司 | 数据网络存取系统及方法 |
CN102143614A (zh) * | 2010-07-01 | 2011-08-03 | 华为终端有限公司 | 升级方法和家庭网关设备 |
CN102682035A (zh) * | 2011-03-18 | 2012-09-19 | 富泰华工业(深圳)有限公司 | 数据管理方法和数据管理系统 |
US20130326324A1 (en) * | 2012-05-31 | 2013-12-05 | Canon Kabushiki Kaisha | Document management server, document management method, and storage medium |
-
2014
- 2014-01-14 CN CN201410015196.1A patent/CN103701937A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101098265A (zh) * | 2006-06-30 | 2008-01-02 | 佛山市顺德区顺达电脑厂有限公司 | 数据网络存取系统及方法 |
CN102143614A (zh) * | 2010-07-01 | 2011-08-03 | 华为终端有限公司 | 升级方法和家庭网关设备 |
CN102682035A (zh) * | 2011-03-18 | 2012-09-19 | 富泰华工业(深圳)有限公司 | 数据管理方法和数据管理系统 |
US20130326324A1 (en) * | 2012-05-31 | 2013-12-05 | Canon Kabushiki Kaisha | Document management server, document management method, and storage medium |
Non-Patent Citations (3)
Title |
---|
李也白: "WebDAV在内容存储管理中的应用", 《计算机与网络》 * |
聂永的博客: "《Servlet 3.0笔记之超方便的文件上传支持》", 《HTTP://WWW.BLOGJAVA.NET/YONGBOY/ARCHIVE/2011/01/15/346202.HTML》 * |
董万杰: "基于WebDAV协议的文档管理系统的设计与实现", 《交通与计算机》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109547566A (zh) * | 2018-12-25 | 2019-03-29 | 华南理工大学 | 一种基于内存分配的多线程上传优化方法 |
CN110278202A (zh) * | 2019-06-18 | 2019-09-24 | 南京科源信息技术有限公司 | 一种文件上传系统 |
CN112351111A (zh) * | 2020-12-30 | 2021-02-09 | 常州微亿智造科技有限公司 | 一种工业质检文件上传服务器端近实时进度监控方法 |
CN112351111B (zh) * | 2020-12-30 | 2023-01-03 | 常州微亿智造科技有限公司 | 一种工业质检文件上传服务器端近实时进度监控方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102355426B (zh) | 实现离线文件传输的方法和系统 | |
CN106506587A (zh) | 一种基于分布式存储的Docker镜像下载方法 | |
CN104077310B (zh) | 加载资源文件的方法、设备和系统 | |
CN108933805A (zh) | 一种文件传输方法及系统 | |
US20150012915A1 (en) | Client-side script bundle management system | |
CN103455439B (zh) | 本地缓存装置以及用于提供内容缓存服务的系统和方法 | |
CN103200212A (zh) | 一种在云计算环境下实现分布式会话的方法和系统 | |
EP2854048A1 (en) | Method of operating a mobile telecommunications device | |
CN104202387A (zh) | 一种元数据恢复方法及相关装置 | |
CN105550246A (zh) | Android平台下加载网络图片的系统及方法 | |
JP2014514639A (ja) | リアルタイム画像を送信するためのシステムおよび方法 | |
CN106713460B (zh) | 一种flash应用的版本控制方法和系统 | |
CN103701937A (zh) | 一种上传大文件的方法 | |
US10749926B2 (en) | Proxy for modifying HTTP messages to comply with browser | |
CN108134811B (zh) | 目标文件分发或下载的方法、装置和系统 | |
CN105227514A (zh) | 基于浏览器的文件传输处理方法和浏览器 | |
CN104572964A (zh) | 一种压缩文件的解压方法和装置 | |
US20110320421A1 (en) | System and method of network data access management | |
CN105141696A (zh) | 文件上传方法和装置 | |
US11645033B2 (en) | Method and apparatus for accessing proprietary resources on a Co-Browse session | |
US8484182B1 (en) | Wireless device content searching | |
CN109617708A (zh) | 一种埋点日志的压缩方法、设备及系统 | |
CN104580276A (zh) | 信息推送方法、装置、系统及信息接入装置 | |
US9648079B2 (en) | System and method for providing content to a requesting terminal | |
CN105893598A (zh) | 一种移动终端图片下载方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140402 |
|
RJ01 | Rejection of invention patent application after publication |