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下載頻道.https://download.csdn.net/download/pulledup/46210881? ? ? ? 或從本人百度網盤下載:
? ? ? ? ? ? ? ? 鏈接: https://pan.baidu.com/s/1Zpxfe5fJruuJW68x3dDTSw
? ? ? ? ? ? ? ? 提取碼:iqvo?
三、其它的補充說明
3.1、優化上傳下載的速度與并發性能的綜合考慮
? ? ? ? 參考本博客博文:
淺談服務器http并發數的影響因素_pulledup的博客-CSDN博客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...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
? ? ? ? 因為這樣,會丟失字節。而應當老實的用字節數組,逐個字節的讀取或寫入。
總結
以上是生活随笔為你收集整理的delphi压缩后使用http协议base64上传下载6G超大文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入浅出MFC第一章笔记
- 下一篇: 工作152:阅读之后台管理登录样式