BinaryWrite over SSL not working in IE

Posted on 2008-11-06
Last Modified: 2012-06-27
I am trying to have a page that offers a logged in user a text document for download. The text documents are in a password protected folder so the page would log in with the appropriate user to access the folder and then uses a binarywrite to serve up the text document. My code works perfectly in IE in a non secure environment but when I try to do it over SSL, I get the following error when I try to download the text document.

"Internet exlporer cannot download download.asp from

Internet explorer was not able to open this Internet site. The requested site is either unavailable or cannot be found. Please try again later."

It also seems to work in netscape. I really need to be able to offer password protected documents to logged in users so any help would be very much appreciated.

Here is the code I am using:

dim oSecurity
Set oSecurity = Server.CreateObject("SoftArtisans.FileManager")
oSecurity.LogonUser "XXXXXXX", "username", "password"


Dim      objStream
Dim      strDownloadFilename
Dim                strFile
dim                homeDirectory
Dim                strFileType
Dim                contentType

homeDirectory = "theDirectory"

Response.Buffer = True
Dim strFilePath, strFileSize, strFileName

Const adTypeBinary = 1

strFile = Request.QueryString("file")
strDownloadFilename = Request.QueryString("file")

' get full path of specified file
strFilePath = "C:\inetpub\wwwroot\" &  homeDirectory & "\MoM\" & strFile
strFileName = strDownloadFilename


Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = adTypeBinary
objStream.LoadFromFile strFilePath

strFileType = lcase(Right(strFileName, 4))

' Feel Free to Add Your Own Content-Types Here
Select Case strFileType
Case ".asf"
ContentType = "video/x-ms-asf"
Case ".avi"
ContentType = "video/avi"
Case ".doc"
ContentType = "application/msword"
Case ".zip"
ContentType = "application/zip"
Case ".xls"
ContentType = "application/"
Case ".gif"
ContentType = "image/gif"
Case ".jpg", "jpeg"
ContentType = "image/jpeg"
Case ".wav"
ContentType = "audio/wav"
Case ".mp3"
ContentType = "audio/mpeg3"
Case ".mpg", "mpeg"
ContentType = "video/mpeg"
Case ".rtf"
ContentType = "application/rtf"
Case ".htm", "html"
ContentType = "text/html"
Case ".asp"
ContentType = "text/asp"
Case Else
'Handle All Other Files
ContentType = "application/octet-stream"
End Select

Response.AddHeader "Content-Disposition", "attachment; filename= " & strFileName
Response.AddHeader "Content-Length", strFileSize
Response.Charset = "UTF-8"
Response.ContentType = ContentType

Response.BinaryWrite objStream.Read

Set objStream = Nothing
Question by:DEWebWorks
    LVL 4

    Accepted Solution

    Try this..   I wrote this a very long time ago, however, I dont know if the XML object can load files from the HD..  Iv'e always used it over the web.

    Author Comment

    It did not work for me. I am getting an access denied error on the objXML.send line. Thanks for the possible solution though.
    LVL 4

    Expert Comment

    I wrote something recently after I posted this that pulled files from the HD and sent them down to the client using ADO Stream and the XML Object..   it did it in chunks, which worked out nicely and it was all over SSL.   When I get back to the office, I'll look it up and post a link to my solution..
    LVL 4

    Expert Comment

    Here is what I did..    sFile is the path to the file, via directory, not http.  

    However I found a problem with this way and no real way around it..  

    This will load the file in full before moving to the next step, so if the file is 100MB in size, it's slow.  I searched for a while and there doesnt seem to be a way to pick up the file in chuncks unless I move to .NET.
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    If objFSO.FileExists(sFile) Then
    	Set objFile = objFSO.GetFile(sFile)
    	Dim iFileSize
    	iFileSize = objFile.Size
      Response.AddHeader "Content-Disposition", "attachment; filename=" & objFile.Name
    	Response.AddHeader "Content-Length", iFileSize
    	Response.ContentType = "application/octet-stream"
    	Set objStream = Server.CreateObject("ADODB.Stream")
    	'-- set as binary
    	objStream.Type = adTypeBinary
    	'-- load into the stream the file
    	Dim iChunkSize, iLeft
    	iChunkSize = 51200	'-- 50KB
    	iLeft = iFileSize
    	Do While Not objStream.EOS Or Not Response.IsClientConnected
    		'-- send the stream in the response
    		If iChunkSize > iLeft Then iChunkSize = iLeft
    		iLeft = iLeft - iChunkSize
    	Set objStream = Nothing
    	Set objFile = Nothing
    	Response.write("File does not exist")
    End if

    Open in new window


    Featured Post

    IT, Stop Being Called Into Every Meeting

    Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

    Join & Write a Comment

    If you have ever used Microsoft Word then you know that it has a good spell checker and it may have occurred to you that the ability to check spelling might be a nice piece of functionality to add to certain applications of yours. Well the code that…
    This article describes some techniques which will make your VBA or Visual Basic Classic code easier to understand and maintain, whether by you, your replacement, or another Experts-Exchange expert.
    Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
    This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

    733 members asked questions and received personalized solutions in the past 7 days.

    Join the community of 500,000 technology professionals and ask your questions.

    Join & Ask a Question

    Need Help in Real-Time?

    Connect with top rated Experts

    23 Experts available now in Live!

    Get 1:1 Help Now