How to download large (400MB +) files from an asp.net page???

T

Thomas Andersson

Hi,

I am trying to find a working solution for download of large files (400-800
MB)...
But this seems almost impossible to find a working example.

I have tried Response.Transmitfile, this works for some people…but in my
case the server reset the connection after approx. 20 minutes and sometimes
after
7-8 minutes…the download speed is however very good 400MB takes about 10
minutes to download.

I have also tried the code below, this solution also resets the connection
after 4-5 MB…and the download goes very slow approx. 55 kb/s…

Please does anyone have any ideas or proposals?
Is it possible to download via FTP?
Is it possible to use resume of broken downloads somehow?
Are there any components on the market that can achieve this?

'Download the selected file

Response.Buffer = False
Server.ScriptTimeout = 100
Dim FullPath As String = Server.MapPath(currentPath + StrFileName)
Dim DownloadFileInfo As New FileInfo(FullPath)
Dim Name = DownloadFileInfo.Name
Dim Ext = DownloadFileInfo.Extension
Dim stream = New System.IO.FileStream(FullPath, System.IO.FileMode.Open,
System.IO.FileAccess.Read, System.IO.FileShare.Read)
Dim StrFileType As String = ""
If Not IsDBNull(Ext) Then
Ext = LCase(Ext)
End If
Select Case Ext
Case ".exe"
'Exe file
StrFileType = "application/octet-stream"
Case ".zip"
'Zip file
StrFileType = "application/x-zip-compressed"
Case ".pdf"
'Pdf file
StrFileType = "application/pdf"
Case ".doc"
'MS Word
StrFileType = "Application/msword"
Case ".dll"
'Dll file
StrFileType = "application/x-msdownload"
Case ".html", ".htm"
'Html file
StrFileType = "text/HTML"
Case ".txt"
'Txt file
StrFileType = "text/plain"
Case ".jpeg", ".jpg"
'Jpg picture
StrFileType = "image/JPEG"
Case Else
StrFileType = "application/octet-stream"
End Select
'Clear the headers
Response.ClearHeaders()
Response.ClearContent()
Response.Clear()
'Add the download headers
Response.ContentType = "application/octet-stream"
Response.AddHeader("Content-Disposition", "attachment; filename=" + Name)
If StrFileType <> "" Then
Response.ContentType = StrFileType
End If
Response.AddHeader("Content-Length", DownloadFileInfo.Length)
Dim buffer(10000) As Byte
Dim length As Long
'Total bytes to read:
Dim bytesToRead As Long = stream.Length
Dim UserHasDownload As Boolean = False
Try
'Read the bytes from the stream in small portions.
While (bytesToRead > 0)
'Make sure the client is still connected.
If (Response.IsClientConnected) Then
'Read the data into the buffer and write into the output stream.
length = Int(stream.Read(buffer, 0, 10000))
Response.OutputStream.Write(buffer, 0, length)
Response.Flush()
'We have already read some bytes.. need to read only the remaining.
bytesToRead = bytesToRead - length
UserHasDownload = True
Else
'Get out of the loop, if user is not connected anymore..
bytesToRead = -1
UserHasDownload = False
End If
End While
Catch
'An error occurred..
Finally
End Try
stream.Close()
 
R

Ray Costanzo [MVP]

"There was no way for you to know it, but this is a classic asp newsgroup.
While you may be lucky enough to find a dotnet-knowledgeable person here who
can answer your question, you can eliminate the luck factor by posting your
question to a group where those dotnet-knowledgeable people hang out. I
suggest microsoft.public.dotnet.framework.aspnet."¹

Ray at work

¹ Response courtesy of Bob Barrows
 
T

Thomas Andersson

Hi Ray,

Thank you for letting me know this.
The reason that I posted here was that I have already posted my question on
the microsoft.public.dotnet.framework.aspnet forum.
Bu no one has answered two of my earlier questions on that forum.
So I was hoping that someone here could answer…


/Thomas ;o)
 
E

Evertjan.

=?Utf-8?B?VGhvbWFzIEFuZGVyc3Nvbg==?= wrote on 12 jul 2005 in
microsoft.public.inetserver.asp.general:
Hi Ray,

Thank you for letting me know this.
The reason that I posted here was that I have already posted my
question on the microsoft.public.dotnet.framework.aspnet forum.
Bu no one has answered two of my earlier questions on that forum.
So I was hoping that someone here could answerƒ Ý

There was no way for Ray to know that. ;-}
 
T

Thomas Andersson

Hi Evertjan,

Well that is true...
I was only answering, I did not mean to be unpleasant ;-)
 
E

Evertjan.

=?Utf-8?B?VGhvbWFzIEFuZGVyc3Nvbg==?= wrote on 12 jul 2005 in
microsoft.public.inetserver.asp.general:
Well that is true...
I was only answering, I did not mean to be unpleasant ;-)

It wasn't ment to be reproachful.

I just liked to echo the "no way to know".

[However, in general, if you you try a second NG with the same Q,
better say so to prevent multiposting flames.]
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,968
Messages
2,570,153
Members
46,699
Latest member
AnneRosen

Latest Threads

Top