PureBasic
PureBasic
Download a Zip from a URL and OpenBd. (No .zip file is created)
See more Zip Examples
Demonstrates how to download a .zip from a URL, opens the Zip, and gets the contents of a file. No file is ever written.Chilkat PureBasic Downloads
IncludeFile "CkBinData.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkZipEntry.pb"
IncludeFile "CkZip.pb"
Procedure ChilkatExample()
success.i = 0
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
http.i = CkHttp::ckCreate()
If http.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
bd.i = CkBinData::ckCreate()
If bd.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; This URL is valid and can be tested...
success = CkHttp::ckQuickGetBd(http,"https://chilkatdownload.com/example_data/hamlet.zip",bd)
If CkHttp::ckLastMethodSuccess(http) = 0
Debug CkHttp::ckLastErrorText(http)
CkHttp::ckDispose(http)
CkBinData::ckDispose(bd)
ProcedureReturn
EndIf
zip.i = CkZip::ckCreate()
If zip.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Open the zip from the bytes contained in bd.
success = CkZip::ckOpenBd(zip,bd)
If success = 0
Debug CkZip::ckLastErrorText(zip)
CkHttp::ckDispose(http)
CkBinData::ckDispose(bd)
CkZip::ckDispose(zip)
ProcedureReturn
EndIf
; Get the entry for the file we want..
entry.i = CkZipEntry::ckCreate()
If entry.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkZip::ckEntryOf(zip,"hamlet.xml",entry)
If success = 0
Debug CkZip::ckLastErrorText(zip)
CkHttp::ckDispose(http)
CkBinData::ckDispose(bd)
CkZip::ckDispose(zip)
CkZipEntry::ckDispose(entry)
ProcedureReturn
EndIf
; Convert all line endings to CRLF (if needed)
lineEndingBehavior.i = 2
xmlStr.s = CkZipEntry::ckUnzipToString(entry,lineEndingBehavior,"utf-8")
If CkZipEntry::ckLastMethodSuccess(entry) = 0
Debug CkZipEntry::ckLastErrorText(entry)
CkHttp::ckDispose(http)
CkBinData::ckDispose(bd)
CkZip::ckDispose(zip)
CkZipEntry::ckDispose(entry)
ProcedureReturn
EndIf
; The XML in this case is about 274K, so let's just examine the last 20 lines...
sb.i = CkStringBuilder::ckCreate()
If sb.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkStringBuilder::ckAppend(sb,xmlStr)
Debug CkStringBuilder::ckLastNLines(sb,20,1)
CkHttp::ckDispose(http)
CkBinData::ckDispose(bd)
CkZip::ckDispose(zip)
CkZipEntry::ckDispose(entry)
CkStringBuilder::ckDispose(sb)
ProcedureReturn
EndProcedure