delphi压缩后使用http协议base64上传下载6G超大文件

delphi压缩后使用http协议base64上传下载6G超大文件

注:服务端软件,使用高勇出品GYRestServer系列。欢迎使用,加QQ群咨询:174483085

一、知识点:

1、Delphi自带的压缩解压单元system.zlib.pas中核心函数的使用

2、服务端http协议ContentType(mime-type)相关列表类型的注册

3、Base64编码的规则

4、为何要分块断点续传,并使用TFileStream文件流替代内存流TMemoryStream

5、Buffer.size对Base64分块断点续传的影响

6、优化上传下载的速度与并发性能的综合考虑

二、直接看视频了解核心关键内容

        从本博客资源下载:

delphi压缩后并使用http协议base64上传下载6G超大文件的演示即核心代码概要.mp4-Delphi文档类资源-CSDN下载知识点:1、Delphi自带的压缩解压单元system.zlib.pas中核心函数的使用;2、服务端更多下载资源、学习资料请访问CSDN下载频道.delphi压缩后使用http协议base64上传下载6G超大文件https://download.csdn.net/download/pulledup/46210881        或从本人百度网盘下载:

                链接: https://pan.baidu.com/s/1Zpxfe5fJruuJW68x3dDTSw
                提取码:iqvo 

三、其它的补充说明

3.1、优化上传下载的速度与并发性能的综合考虑

        参考本博客博文:

浅谈服务器http并发数的影响因素_pulledup的博客-CSDN博客delphi压缩后使用http协议base64上传下载6G超大文件https://blog.csdn.net/pulledup/article/details/121383350

3.2、服务端http协议ContentType(mime-type)相关列表类型的注册

        参考本博客博文:

delphi MimeType for Restful及delphi mime-type和文件扩展名对照表_pulledup的博客-CSDN博客delphi MimeType for Restful MimeType是你让编写的应用Restful化编程所必须的。delphi支持哪些MimeType,如何知道这些MimeType与文件扩展名的对应关系,以及它们是文本种类、二进制种类还是未定义的。一、先上代码 : 已附上面源码下载。由于代码引用了跨平台的文件存取,使用源码注意事项:1、在FormCre...delphi压缩后使用http协议base64上传下载6G超大文件https://blog.csdn.net/pulledup/article/details/105774767delphi XE应用Restful时Rest组件的delphi XE ContentType即delphi XE mime type怎样获取和表达_pulledup的博客-CSDN博客delphi XE应用Restful时Rest组件的delphi XE ContentType即delphi XE mime type怎样获取和表达一、usesREST.Types;//var //DefaultRESTRequestParameterKind: TRESTRequestParameterKind = TRESTRequestParameterKind.pkGETor...delphi压缩后使用http协议base64上传下载6G超大文件https://blog.csdn.net/pulledup/article/details/105749158

3.3、Buffer.size对Base64分块断点续传的影响

         为何使用Base64?

        如果你仅仅是上传下载,而无需下载后H5加载,可以不必非得使用TBase64Encoding来编解码。可参考本博客博文:

Delphi处理高速文件上传下载的代码及思路_pulledup的博客-CSDN博客Delphi处理高速文件上传下载的代码及思路 上传和下载是一对方向不同的概念,下面对应的客户端和服务器代码:掉个头,它就是下载;再掉个头,它就是上传。一、思路 1、将大文件:分段(即常说的“断点”上传或下载)上传或下载 2、分别上传或下载这些分段 3、将上传或下载后的各“分段”文件流合并还原 4、关于加速(网上你经常看到“高速”上传或下载):若多线程分别上传或下载这些分段,即可提速。 你们去使用 高勇老师的代码,它是完全...delphi压缩后使用http协议base64上传下载6G超大文件https://blog.csdn.net/pulledup/article/details/108660481

        否则,请使用Base64,它可以对html和URL进行编解码。请直接使用高勇出品GYRestServer系列及其配套客户端GYRestClient.pas中的相关代码进行客制化。

         Base64内容传输时需要注意的事项:

//http分块上传或下载时,需注意:
            block := (6*25)*7 * 1024 * 1;//=1050KB
              //:来超2021-11-19:提升服务器并发性能:拷贝分块大小,delphi默认32kb
            //block := 1024 * 1024 * 1;//:拷贝分块大小,每次拷贝1M:
              //:(一次上传,最多不能超过25M,似乎超过了,就没有响应)
              //:Buffer不正确会对Base64分段产生无规律的不可预期的影响:
              //:Base64----4组每组6位编码----块:6位字节的整数倍--以替换8位1组的二进制
                //:W3C标准:  https://datatracker.ietf.org/doc/html/rfc2045
              //:delphi默认buffer.size=32k,太小了:
                //:1.1、客户会感觉太慢了
                //:1.2、某些服务器也可能做了限制:不允许连续发小包给它,它人为你是在http攻击
              //:buffer.size=N个KB,太大了:
                //:2.1、客户端内存不允许:上限好像是忘了65535KB? 32768KB? 总之最好不要超过1M
                //:2.1、服务器并发时,
                  //:内存(取决于服务器内存的大小)
                  //:磁盘(取决服务器硬盘通道即单位时间IO速度)、
                  //:网路带宽(取决你服务器的带宽)
                    //:它们受不了大的“冲击波"


        Base64 内容传输的W3C标准说明:

rfc2045        rfc2045        rfc2045

3.4、为何需使用TFileStream文件流替代内存流TMemoryStream

        并发时,压缩解压也好、上传下载也好,或使用内存流TMemoryStream,内存的开销太大、而且内存很昂贵,使用文件流TFileStream替代内存流,会有效避免此问题。

        用Delphi自带的system.zlib.pas库单元函数压缩解压时,要特别注意:

        3.4.1、必要期待你能用常用的压缩解压工具,去打开system.zlib压缩文件,因为它是Delphi专用的压缩格式,加了密的;不过这样也很安全;

        3.4.2、无论压缩环节还是解压环节均不要TStream.CopyFrom

        因为这样,会丢失字节。而应当老实的用字节数组,逐个字节的读取或写入。

上一篇:Delphi使用TryStrToDate判断字符串是否为日期格式


下一篇:delphi网络组件ICS的THttpCli和TSslHttpCli如何设置自定义Header