filedownload 2

17/07/2009 - 12:18 von Mirco Kaminski | Report spam
Hallo NG,

ich habe immer noch Probleme mit dem Download eines grösseren Files (85 Mb).
(.NET 2.0)

Der Download funktioniert zwar auf meiner Umgebung, aber immer mehr Kunden
sagen,
dass der Download nach ca. 50 Mb abbricht.

Jetzt habe ich den Vorschlag vom 8.2. eingebaut. Aber auf allen Browsern
erhalte
ich die Meldung, das die Seite nicht angezeigt werden kann.
Normalerweise müsste doch bei einem Fehler der Catch-Zweig kommen oder
die Errorpage. Aber hier kommt nur die Browsermeldung.

Vielen Dank für jeden Tip.
Gruß
Mirco



System.IO.Stream iStream = null;

// Buffer to read 10K bytes in chunk:
byte[] buffer = new Byte[10000];

// Length of the file:
int length;

// Total bytes to read:
long dataToRead;

// Identify the file to download including its path.
string filepath = "download/setup.exe";
// Identify the file name.
string filename = System.IO.Path.GetFileName(filepath);
try
{
// Open the file.
iStream = new System.IO.FileStream(filepath,
System.IO.FileMode.Open,
System.IO.FileAccess.Read,
System.IO.FileShare.Read);

// Total bytes to read:
dataToRead = iStream.Length;

Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;
filename=" + filename);

// Read the bytes.
while (dataToRead > 0)
{
// Verify that the client is connected.
if (Response.IsClientConnected)
{
// Read the data in buffer.
length = iStream.Read(buffer, 0, 10000);

// Write the data to the current output stream.
Response.OutputStream.Write(buffer, 0, length);

// Flush the data to the HTML output.
Response.Flush();

buffer = new Byte[10000];
dataToRead = dataToRead - length;
}
else
{
//prevent infinite loop if user disconnects
dataToRead = -1;
}
}
}
catch (Exception ex)
{
// Trap the error, if any.
this.Message.Text = "Error : " + ex.Message;
}
finally
{
if (iStream != null)
{
//Close the file.
iStream.Close();
}
Response.Close();
}
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
17/07/2009 - 12:36 | Warnen spam
Hallo Mirco,

"Mirco Kaminski" schrieb:

Jetzt habe ich den Vorschlag vom 8.2. eingebaut. Aber auf allen Browsern erhalte ich die Meldung, das die Seite nicht angezeigt
werden kann.



schon mal mit Response.TransmitFile( ... ) probiert?

Normalerweise müsste doch bei einem Fehler der Catch-Zweig kommen oder
die Errorpage. Aber hier kommt nur die Browsermeldung.



Es ist wohl eher kein Serverfehler sondern ein Timeoutproblem beim Client.
Ich hab da bisher zwar keine Probleme festgestellt aber trotzdem mal ein
paar Fragen:

Haben die Kunden, bei denen sich das Problem zeigt, eine Gemeinsamkeit?
Browser, Firewall, Virenscanner, Proxy, ...?

Welche Bandbreite für den Downstream haben die Kunden, die das betrifft?

Steht im Ereignisprotokoll des Servers irgendwas, was doch auf einen
Serverfehler hindeutet?

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen