delphi分块压缩使用http协议base64上传下载超大文件

介绍使用Delphi实现大文件通过HTTP协议Base64编码分块上传与合并的方法,包括压缩解压技术、文件流操作及服务端处理。

delphi分块压缩使用http协议base64上传下载超大文件

目录

delphi分块压缩使用http协议base64上传下载超大文件

一、知识点:

二、需要注意的事项

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

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

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

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

三、客户端代码

四、服务端代码


一、知识点:

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

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

3、Base64编码的规则

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

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

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

二、需要注意的事项

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

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

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

         为何使用Base64?

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

        否则,请使用Base64,它可以对html和URL进行编解码。可对相关代码进行客制化。

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

http分块上传或下载时,需注意,假如:每次拷贝接近1M:
            block := 6*(25*7)* 1024 * 1 =  8* 128 * 1024 * 1 ;//=1050KB
            提升服务器并发性能:拷贝分块大小,系统默认默认32kb
            一次上传,最多不能超过25M,似乎超过了,就没有响应
            Buffer不正确,分片时,会对Base64产生无规律的不可预期的影响,因为填充会出问题;块:6位字节的整数倍;
            系统默认buffer.size=32k,太小了:
            1.1、使用者会感觉太慢了
            1.2、某些服务器也可能做了限制:不允许连续发小包给它,它人为你是在http攻击
                   buffer.size=N个KB,太大了:
                   1.2.1、使用者内存不允许:上限 65535KB; 总之最好不要超过1M
                   1.2.2、服务器并发时,
                           内存(取决于服务器内存的大小)
                           磁盘(取决服务器硬盘通道即单位时间IO速度)、
                           网路带宽(取决你服务器的带宽)
                           它们受不了大的“冲击波"


        Base64 内容传输的W3C标准说明,请自行查阅互联网标准组织文档,rfc2045。

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

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

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

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

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

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

三、客户端代码

  ///<summary>RestFull上传文件函数(文件流方法):
    ///上传

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

专讲冷知识

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

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

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

打赏作者

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

抵扣说明:

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

余额充值