ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-11-21 18:05:31  阅读:303  来源: 互联网

标签:http 6G pulledup delphi Base64 博客 上传下载 下载


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下载频道.https://download.csdn.net/download/pulledup/46210881        或从本人百度网盘下载:

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

三、其它的补充说明

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

        参考本博客博文:

浅谈服务器http并发数的影响因素_pulledup的博客-CSDN博客icon-default.png?t=LA92https://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...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...https://blog.csdn.net/pulledup/article/details/105749158

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

         为何使用Base64?

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

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

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

标签:http,6G,pulledup,delphi,Base64,博客,上传下载,下载
来源: https://blog.csdn.net/pulledup/article/details/121455926

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有