delphi分块压缩使用http协议base64上传下载超大文件
目录
delphi分块压缩使用http协议base64上传下载超大文件
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上传文件函数(文件流方法):
///上传

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





