Streaming a file Thread Exceptions out

  • Thread starter Thread starter Eric Sabine
  • Start date Start date
E

Eric Sabine

I have a web site where the user is able to download a file. I can't use an
anchor tag because I don't want the user to see where the filename is coming
from. Below is the code in which the user clicks to get the file. I could
swear this used to work but it definitely doesn't now. Each time at the
Response.End() method, I get a System.Threading.ThreadAbortException. I'm
not really sure why it is happening. Any clues?
Eric

Dim fStream As New System.IO.FileStream("c:\test.htm", IO.FileMode.Open,
IO.FileAccess.Read, IO.FileShare.Read)
Dim b(CType(fStream.Length, Int32)) As Byte
Response.Clear()
Response.ClearContent()
Response.ClearHeaders()
Response.ContentType = "application/unknown"
Response.AddHeader("Content-Disposition", "attachment;filename=c:\test.htm")
fStream.Read(b, 0, CType(fStream.Length, Int32))
Response.BinaryWrite(b)
Response.End()
fStream.Close()
fStream = Nothing
 
Take the Response.End() out of it. That method raises the exception, and is
unnecessary. In fact, all of the clearing of the Response is also
unnecessary, unless you've already sent some of the Response.

--
Kevin Spencer
..Net Developer
Microsoft MVP
Big things are made up
of lots of little things.
 
Kevin, I took out the .end method and much to my surprise, now it streams
the text of my index.aspx page. So for example, I am testing with a text
file called test.htm. It's content is only the word test. When my code bit
from below runs, the browser pops up a save/open dialogue. The file name
suggested is "index" with no known extension. If I save the file and open
it, I see the following

test
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>File Transferring Page</title>

etc.

My whole index.aspx is streamed.

Any ideas?

Eric
 
Looks like you've still got some HTML in your Page Template (ASPX file). If
you remove everything but the @Page directive, it should be fine.

--
Kevin Spencer
..Net Developer
Microsoft MVP
Big things are made up
of lots of little things.
 
Wow that doesn't make sense to me. My index.asp starts out like this

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="index.aspx.vb"
Inherits="filetransfer.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>File Transferring Page</title>
etc.

What are suggesting I remove? Most everything in the index.ASPX file is
HTML. But I don't thing that's what you meant.

Please check this thread back on Monday as I'm about to walk away from my PC
until then.

Thanks
Eric
 
What are suggesting I remove? Most everything in the index.ASPX file is
HTML. But I don't thing that's what you meant.

That's what I meant. The HTML that VS.Net adds to your page is due to the
fact that an HTML document is what an ASPX page returns ALMOST all the time.
Streaming a file is one of the exceptions. In that case, you don't want any
additional content streamed to the browser; just what you send via your
code.

--
Kevin Spencer
..Net Developer
Microsoft MVP
Big things are made up
of lots of little things.
 
Back
Top