So you are running IIS7.5 and you are scripting to download a file to a client but you keep getting then Content-length removed from the headers. So the client won't see how much is left until the down load is done!

 

The trick is this:  Delete the Content-Encoding header or set it to "";

context.Response.AppendHeader("Content-Encoding","");

public void ProcessRequest(HttpContext context)

{

context.Response.BufferOutput = false;

string name = "myfile.mpeg";

string path = Path.Combine(context.Request.PhysicalApplicationPath, name);

FileInfo fileInfo = new FileInfo(path);

long length = new FileInfo(path).Length;

 

context.Response.Clear();

context.Response.ClearHeaders();

context.Response.ClearContent();

context.Response.AppendHeader("Content-Length", length.ToString() );

context.Response.AppendHeader("Content-Encoding","");

context.Response.ContentType = "application/octet-stream";

context.Response.AppendHeader("Content-Disposition", string.Format("attachment;filename=\"{0}-{1}\"", length.ToString(),name));

 

 

context.Response.Flush();

byte[] buffer = new byte[6500];

int bytesRead = 0;

using(Stream input = fileInfo.OpenRead())

{

while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)

{

if (context.Response.IsClientConnected)

{

context.Response.OutputStream.Write(buffer, 0, bytesRead);

context.Response.Flush();

}

else

{

bytesRead = -1;

}

}

}

context.ApplicationInstance.CompleteRequest();

return;

}

 

Keywords:

Content-length gets deleted

iis header Content-length