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文档类资源-优快云下载
知识点:1、Delphi自带的压缩解压单元system.zlib.pas中核心函数的使用;2、服务端更多下载资源、学习资料请访问优快云下载频道.
https://download.youkuaiyun.com/download/pulledup/46210881
        或从本人百度网盘下载:

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

三、其它的补充说明
3.1、优化上传下载的速度与并发性能的综合考虑
        参考本博客博文:

浅谈服务器http并发数的影响因素_pulledup的博客-优快云博客
https://blog.youkuaiyun.com/pulledup/article/details/121383350

3.2、服务端http协议ContentType(mime-type)相关列表类型的注册
        参考本博客博文:

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

3.3、Buffer.size对Base64分块断点续传的影响
         为何使用Base64?

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

Delphi处理高速文件上传下载的代码及思路_pulledup的博客-优快云博客
Delphi处理高速文件上传下载的代码及思路 上传和下载是一对方向不同的概念,下面对应的客户端和服务器代码:掉个头,它就是下载;再掉个头,它就是上传。一、思路 1、将大文件:分段(即常说的“断点”上传或下载)上传或下载 2、分别上传或下载这些分段 3、将上传或下载后的各“分段”文件流合并还原 4、关于加速(网上你经常看到“高速”上传或下载):若多线程分别上传或下载这些分段,即可提速。 你们去使用 高勇老师的代码,它是完全...
https://blog.youkuaiyun.com/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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蝈蝈(GuoGuo)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值