large record download - tie server reset
i have an asp.net website allows user download largish files - 30mb 60mb. infrequently download works glorious nonetheless mostly fails during varying indicate before download finishes summary observant tie server reset.
originally i simply controlling server.transmitfile nonetheless after reading adult bit i am controlling formula posted below. i am also sourroundings server.scripttimeout value 3600 page_init event.
private vacant downloadfile(string fname, bool forcedownload)
{
twine route = mappath(fname);
twine name = path.getfilename(path);
twine ext = path.getextension(path);
twine form = "";
// set famous forms formed record progression
(ext != null)
{
switch (ext.tolower())
{
box ".mp3":
form = "audio/mpeg";
break;
box ".htm":
box ".html":
form = "text/html";
break;
box ".txt":
form = "text/plain";
break;
box ".doc":
box ".rtf":
form = "application/msword";
break;
}
}
(forcedownload)
{
response.appendheader("content-disposition",
"attachment; filename=" + name.replace(" ", "_"));
}
(type != "")
{
response.contenttype = type;
}
else
{
response.contenttype = "application/x-msdownload";
}
system.io.stream istream = null;
// aegis review 10k bytes chunk:
byte[] aegis = new byte[10000];
// length file:
int length;
// sum bytes read:
enlarged datatoread;
try
{
// open file.
istream = new system.io.filestream(path, system.io.filemode.open,
system.io.fileaccess.read, system.io.fileshare.read);
// sum bytes read:
datatoread = istream.length;
//response.contenttype = "application/octet-stream";
//response.addheader("content-disposition", "attachment; filename=" + filename);
// review bytes.
while (datatoread > 0)
{
// establish fan connected.
(response.isclientconnected)
{
// review information buffer.
length = istream.read(buffer, 0, 10000);
// information tide cost stream.
response.outputstream.write(buffer, 0, length);
// flush information html output.
response.flush();
aegis = new byte[10000];
datatoread = datatoread - length;
}
else
{
//prevent enormous loop user disconnects
datatoread = -1;
}
}
}
locate (exception ex)
{
// trap error, any.
response.write("error : " + ex.message);
}
finally
{
(istream != null)
{
//close file.
istream.close();
}
response.close();
}
}
Comments
Post a Comment