المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : File downloader 'resume' problem



C# Programming
08-24-2009, 11:50 PM
I have a VS2005 web project that provides file content download. Since some files are large I want to be able to pause/resume the download. I have added the 'Range' header and byte marker but am getting two problems:
1) File name is getting corrupted with a ',' comma character on the end of the file name (i.e. 'File.zip' shows in the save dialog as 'file.zip,' - could this be a cached file name suggestion?

2) The resume won't fire (possibly due to problem 1)
Environment is IIS6, VS2k5/C#/ASPX.

Have tried with FireFox (3.5.2) and Internet Download manager.

Here's the code - TIA


if (File.Exists(strFilePath))
{
byte[] buffer = new byte[Int32.Parse(Config.Settings["bufferSize"])];
int length;
long dataToRead, dataLength, bytesDownloaded;
long start = 0;

string range = Request.Headers["Range"];
if (range != null)
{
range = range.Replace("bytes=", "");
range = range.Substring(0, range.IndexOf("-"));
start = Int64.Parse(range);
}
Response.Expires = 0;
bytesDownloaded = 0;
using (FileStream dlStream = new FileStream(strFilePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
if (start > 0)
{
dlStream.Seek(start, SeekOrigin.Begin);
dataToRead = dlStream.Length - start;
}
else
{ dataToRead = dlStream.Length; }
dataLength = dataToRead;
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + dlStream.Name.Substring(dlStream.Name.LastIndexOf(@"\") + 1) + "\"");
Response.AddHeader("Content-Length", dlStream.Length.ToString());
length = dlStream.Read(buffer, 0, Int32.Parse(Config.Settings["bufferSize"]));
while (dataToRead > 0)
{
if (Response.IsClientConnected)
{
Response.OutputStream.Write(buffer, 0, length);
bytesDownloaded += length;
Response.Flush();
buffer = new byte[Int32.Parse(Config.Settings["bufferSize"])];
dataToRead -= length;
}
else
{ break; }
}
try
{ dlStream.Close(); }
catch
{
if (dlStream != null)
{
_errors.SendErrorEmail("download.aspx", "failed to close the file stream when user " + objUser.LoginID + " attempted to download " + strFilePath + ".", objUser);
}
}
}

;

Thank you for taking the time to look at this

Tom