Archived Forum PostQuestion:
Hello,
Can you make an example in Classic ASP for sending chucnks of data to the browser using CKData? This would be similar to the way File Access can chuck to the browser. Sending large pdf files via the chunk method works very well.
Thanks
DocSize = FAC.FileSize(PDFName)
fac.FileOpen(PDFName, accessMode, shareMode, createDisp, fileAttr)
Response.Clear()
Response.ContentType = sContentType
Response.AddHeader "Content-transfer-encoding", "binary"
Response.AddHeader "content-length", DocSize
Response.Addheader "content-disposition", "inline;filename=" & FileName
' Stream the file to the output:
Dim dataChunk
Do While (fac.EndOfFile = 0)
' Read chunks of 4K at a time...
dataChunk = fac.FileRead(4096)
If (not (isNull(dataChunk))) then
Response.BinaryWrite(dataChunk)
Response.Flush
End If
Loop
FAC.FileClose
Set FAC = Nothing
Response.Flush
A better fit would be to use the Chilkat CkFileAccess ActiveX
(see http://www.chilkatsoft.com/refdoc/xCkFileAccessRef.html )
The programming would be virtually identical to how you are using FAC in your example above.
HTTP requests and responses are MIME. The HttpResponse.Body property returns the response body (i.e. the content of the HTTP response MIME body) already decoded. In other words, you don't need to worry about the Content-Transfer-Encoding MIME header, which indicates how the content of the MIME body is encoded, such as "base64", "quoted-printable", "8bit", etc.
Therefore, this would be incorrect: dataObj.LoadBase64 responseObj.Body
You would instead do this: dataObj.LoadBinary responseObj.Body
The CkData ActiveX API provides a GetChunk method (see http://www.chilkatsoft.com/refdoc/xCkDataRef.html) such that you can get any chunk of the entire data by specifying a start index and length. There is also a NumBytes property that is the total number of bytes. Therefore, you can write a loop that gets chunk-by-chunk and sends it to the response...
It works now. If anyone is interested, here is the final code to send the binary data in chucks to the browser.
With Response
.Expires = 0
.Clear
.ContentType = "application/pdf"
.AddHeader "Content-transfer-encoding", "binary"
.AddHeader "content-length", oData.NumBytes
.AddHeader "Content-Disposition", "inline;filename=" & CI("FileName")
' Send the body of the http request to the body of this response
' *Loop here to send chunks to the browser
TheOffset = 0
TheSize = 4096
Do Until TheOffset > oData.NumBytes
.BinaryWrite oData.GetChunk(TheOffset, TheSize)
TheOffset = TheOffset + TheSize
Loop
End With