Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion GroupsGeneralPHPASPPerlColdFusionFlashHTML, CSS, ScriptsBrowsers

Webmaster Forum / ASP / General ASP Topics / September 2008



Tip: Looking for answers? Try searching our database.

file size limit in Response.binarywrite

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
S N - 07 Sep 2008 13:42 GMT
I am using the following code to hide the download url of files on my website. The code uses Response.Binarywrite to send file to the client.
Kindly indicate the maximum size of the file that can be downloaded using this method.
I am hosting this site on a public server, so I will not be able to change anything on the webserver. Kindly indicate what can be done to ensure that the above method remains valid for any file size download.

call Response.AddHeader("Content-Disposition","attachment; filename=""" & strFileSave & """")
    Response.ContentType = "bad/type"
    Set Fsys = Server.CreateObject("Scripting.FileSystemObject")
    Set TS = Fsys.GetFile(strFile).OpenAsTextStream(1, -1)
    Do While Not (TS.AtEndOfStream)
     Response.BinaryWrite(TS.Read(1))
    Loop
Old Pedant - 08 Sep 2008 03:44 GMT
> I am using the following code to hide the download url of files on my website. The code uses Response.Binarywrite to send file to the client.
> Kindly indicate the maximum size of the file that can be downloaded using this method.
[quoted text clipped - 5 lines]
>       Response.BinaryWrite(TS.Read(1))
>      Loop

Ummm...that code isn't goint to work, anyway.  See the method
   OpenAsTEXTstream
???

You really can only use FileSystemObject reliably with text files; it wasn't
designed to work with binary files.

You need to use ADODB.Stream object, instead.  
http://msdn.microsoft.com/en-us/library/ms675032(VS.85).aspx

And then you could easily control the amount you write in each chunk by just
limiting the amount you Read each time.
S N - 08 Sep 2008 04:10 GMT
Thanks for the advice. I was under the impression that ADODB can be used
only for databases. This is the first instance of using it on files.
Can you please provide a sample code to hide download url by using ADODB
stream, while there should be no limit on the size of files to be
downloaded.

.

>> I am using the following code to hide the download url of files on my
>> website. The code uses Response.Binarywrite to send file to the client.
[quoted text clipped - 23 lines]
> just
> limiting the amount you Read each time.
Old Pedant - 08 Sep 2008 22:51 GMT
> Can you please provide a sample code to hide download url by using ADODB
> stream, while there should be no limit on the size of files to be
> downloaded.

Good old Atrax has a couple of demos.

Note that his code is written in JScript for ASP, but conversion to VBScript
should be easy.

http://rtfm.atrax.co.uk/infinitemonkeys/articles/asp/934.asp
and
http://rtfm.atrax.co.uk/infinitemonkeys/articles/asp/935.asp

If you need more help, ask.
S N - 09 Sep 2008 04:21 GMT
I would be grateful if you can give me vbscript code as well.
I would also like to clarify that the code for jscript forces save as
dialog. What if we want to hide the download url but dont want to force the
save as dialog, instead just want to see the pdf file within the browser
window itself.
Kindly advise on this.

Thanks in anticipation.

>> Can you please provide a sample code to hide download url by using ADODB
>> stream, while there should be no limit on the size of files to be
[quoted text clipped - 11 lines]
>
> If you need more help, ask.
Anthony Jones - 09 Sep 2008 09:50 GMT
>I am using the following code to hide the download url of files on my
>website. The code uses Response.Binarywrite to send file to the >client.
[quoted text clipped - 12 lines]
>      Response.BinaryWrite(TS.Read(1))
>    Loop

Use this code:-

Sub SendFileToResponse(FilePath, FileName)

Const clChunkSize = 1048576 ' 1MB

Dim oStream, i
Response.Buffer = False

Response.ContentType = "application/octet-stream"
Response.AddHeader "Content-Disposition", _
 "attachment; Filename=" & FileName

Set oStream = Server.CreateObject("ADODB.Stream")
oStream.Type = 1 ' Binary
oStream.Open
oStream.LoadFromFile FilePath

For i = 1 To oStream.Size \ clChunkSize
  Response.BinaryWrite oStream.Read(clChunkSize)
Next
If (oStream.Size Mod clChunkSize) <> 0 Then
  Response.BinaryWrite oStream.Read(oStream.Size Mod clChunkSize)
End If
oStream.Close

End Sub

SendFileToResponse strFile, strFileSave

Note the Response.Buffer = false allows you to send a file of any size.

Signature

Anthony Jones - MVP ASP/ASP.NET

S N - 09 Sep 2008 16:11 GMT
What if we want to use sendfiletoresponse but dont want to force the save as
dialog, instead just want to see the pdf file within the browser window
itself.
is there any change required in the code to achieve this.

>>I am using the following code to hide the download url of files on my
>>website. The code uses Response.Binarywrite to send file to the >client.
[quoted text clipped - 44 lines]
>
> Note the Response.Buffer = false allows you to send a file of any size.
Anthony Jones - 09 Sep 2008 16:46 GMT
> What if we want to use sendfiletoresponse but dont want to force the save
> as dialog, instead just want to see the pdf file within the browser window
> itself.
> is there any change required in the code to achieve this.

If you know its a pdf then change content-type to application/pdf and remove
the attachment; keyword from content-disposition.

Signature

Anthony Jones - MVP ASP/ASP.NET

S N - 09 Sep 2008 21:14 GMT
Following error received:

Response object error 'ASP 0157 : 80004005'
Buffering On

/test/dl.asp, line 2

Buffering cannot be turned off once it is already turned on.

Please note that I am hosting the site on a public server so there is no way
to ask the web admin to configure the server specifically for me. In such a
situation is it possible to eliminate the error as indicated above. Further,
if I am not able to switch off the response.buffer, will there be any
limitation on the size of file that i can download using
response.binarywrite?

>> What if we want to use sendfiletoresponse but dont want to force the save
>> as dialog, instead just want to see the pdf file within the browser
[quoted text clipped - 3 lines]
> If you know its a pdf then change content-type to application/pdf and
> remove the attachment; keyword from content-disposition.
Anthony Jones - 09 Sep 2008 21:25 GMT
> Following error received:
>
[quoted text clipped - 4 lines]
>
> Buffering cannot be turned off once it is already turned on.

You get this error if there is anything in your page or includes at the top
of the page which writes stuff to the response before your code has run.
Note any static content in the page will be sent.

Typical a page of this sort looks like:-

<!-- #include .... some common include -->
<%

' Code here that should note writing anything.
'My code I posted to you with your mods.
%>

Where the include is of a similar structure defininng constants and utility
functions.

> Please note that I am hosting the site on a public server so there is no
> way to ask the web admin to configure the server specifically for me.

Whilst an admin may have configured the buffer to be on (which is the
default) you can set it off as long as you do so before sending anything.

>In such a situation is it possible to eliminate the error as indicated
>above. Further, if I am not able to switch off the response.buffer, will
>there be any limitation on the size of file that i can download using
>response.binarywrite?

Without turning it off there will be a limitation.  The is a buffer size
limit that a public server administrator will almost certainly have
configured (the default on IIS6 is 4MB).

Signature

Anthony Jones - MVP ASP/ASP.NET

S N - 09 Sep 2008 21:19 GMT
Also advise the content type in case the file is an excel file, word
document, exe file, zip file etc.

Thanks in advance.

>> What if we want to use sendfiletoresponse but dont want to force the save
>> as dialog, instead just want to see the pdf file within the browser
[quoted text clipped - 3 lines]
> If you know its a pdf then change content-type to application/pdf and
> remove the attachment; keyword from content-disposition.
Anthony Jones - 09 Sep 2008 21:47 GMT
> Also advise the content type in case the file is an excel file, word
> document, exe file, zip file etc.

Try Google: mime type xxx where xxx = doc, exe etc.

Signature

Anthony Jones - MVP ASP/ASP.NET

S N - 09 Sep 2008 22:14 GMT
Got it. But now a new problem.
When I place <%Response.Buffer=False%> as the first line of my asp file, no
file is downloaded and no message comes.
However, when I delete the <%Response.Buffer=False%> line then the file
downloads as expected.

Please advise.

>> Also advise the content type in case the file is an excel file, word
>> document, exe file, zip file etc.
>
> Try Google: mime type xxx where xxx = doc, exe etc.
S N - 09 Sep 2008 22:16 GMT
Also I am linking the download code from another file. When I run the
download code without referring to it from another file, it runs. But When I
refer it from another file and it has <%Response.Buffer=False%> line, then I
get the message
Response object error 'ASP 0156 : 80004005'

Header Error

/test/dl.asp, line 114

The HTTP headers are already written to the client browser. Any HTTP header
modifications must be made before writing page content.

Please help

>> Also advise the content type in case the file is an excel file, word
>> document, exe file, zip file etc.
>
> Try Google: mime type xxx where xxx = doc, exe etc.
S N - 09 Sep 2008 22:33 GMT
I got it finally. Thanks.
Just one clarification
You intended
For i = 1 To oStream.Size / clChunkSize

or

For i = 1 To oStream.Size \ clChunkSize

Please clarify.

> Also I am linking the download code from another file. When I run the
> download code without referring to it from another file, it runs. But When
[quoted text clipped - 15 lines]
>>
>> Try Google: mime type xxx where xxx = doc, exe etc.
Old Pedant - 10 Sep 2008 03:00 GMT
> Just one clarification
> You intended
>  For i = 1 To oStream.Size / clChunkSize
> or
>  For i = 1 To oStream.Size \ clChunkSize

He *intended* the latter.

The backslash operator means "integer division" in VBScript (and VB and
VB.NET) code.

That is,
    a \ b
is equivalent to
   INT( a / b )

********************

Also, you don't need to mess with Response.Buffer=False, at all.

Just follow each
   Response.BinaryWrite
with
  Response.Flush

Now the buffer will never get more full than one "chunkSize".
Anthony Jones - 10 Sep 2008 21:02 GMT
>> Just one clarification
>> You intended
[quoted text clipped - 22 lines]
>
> Now the buffer will never get more full than one "chunkSize".

Yes that would work.  However it would mask unintended errors that turning
the buffer off right at the top of the code exposes.

Signature

Anthony Jones - MVP ASP/ASP.NET

S N - 13 Sep 2008 14:41 GMT
>>> Just one clarification
>>> You intended
[quoted text clipped - 25 lines]
> Yes that would work.  However it would mask unintended errors that turning
> the buffer off right at the top of the code exposes.

what kind of errors would be exposed by turning off the buffer. kindly
elaborate.
Anthony Jones - 13 Sep 2008 21:14 GMT
>>>> Just one clarification
>>>> You intended
[quoted text clipped - 28 lines]
> what kind of errors would be exposed by turning off the buffer. kindly
> elaborate.

Well the sort of problems you've discovered where you may unintentionaly be
placing things in the output buffer that you didn't want present.  Example:-

<!-- #include /virtual="/someinclude.asp" -->
<%
Response.ContentType = "application/octet-stream"
Do Until ....
   Response.BinaryWrite SomeStuff
   Response.Flush
Loop
%>

'someinclude.asp

<!-- Ooops some accidental static content here -->
<%

'utility code

%>

Placing a Response.Buffer at the top of your page would barf immediately on
that line alerting you to a problem.
It also saves you having to remember to Response.Flush if you have multiple
places where you write to the buffer.

Signature

Anthony Jones - MVP ASP/ASP.NET

 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.