尝试在以下使用 IIS7 的操作系统中通过 http 请求下载视频文件时出现我的问题:win2008 32Bit、Win2008 R2 64Bit
目前工作正常: win2003 , vista64 (IIS6)
问题描述:当用户通过 C# 请求大于 256mb 的文件时,他们会得到一个有限的文件,即使使用 Content-Length 参数,文件似乎也得到了正确的大小,但不是完整的内容。
请求文件的 URL 时,我得到了完整的文件,问题仅通过 C# 脚本发生,也是完整缓冲区已发送给用户的 C# 响应。
我在文章中更改了 IIS7 设置:
http://blog.twinharbor.com/2011/07/28/fixing-iis7-maximum-upload-size/
但它仍然不起作用。
此外,任何地方都没有评论或错误。
请找到我的代码示例:
var context = System.Web.HttpContext.Current;
context.Response.ContentEncoding = Encoding.GetEncoding("windows-1255");
context.Response.HeaderEncoding = Encoding.GetEncoding("UTF-8");
context.Response.Charset = "utf-8";
System.IO.Stream iStream = null;
// Buffer to read 100K bytes in chunk:
byte[] buffer = new Byte[100000];
// Length of the file:
int length=0;
// Total bytes to read:
long dataToRead=0;
// Identify the file to download including its path.
string filepath = u.Trim(BigFile);
// Identify the file name.
string filename = System.IO.Path.GetFileName(filepath);
Start.Value = u.Time();
try
{
iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
dataToRead = iStream.Length;
context.Response.Charset = "";
context.Response.ContentType = "application/octet-stream";
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
context.Response.AddHeader("Content-Length", dataToRead.ToString());
while (dataToRead > 0)
{
if (context.Response.IsClientConnected)
{
length = iStream.Read(buffer, 0, 100000);
context.Response.OutputStream.Write(buffer, 0, length);
context.Response.Flush();
buffer = new Byte[100000];
dataToRead = dataToRead - length;
}
else
{
dataToRead = -1;
}
}
}
catch (Exception ex)
{
context.Response.Write("Error : " + ex.Message);
}
finally
{
if (iStream != null)
{
iStream.Close();
}
context.Response.Close();
}
我会欣赏你的帮助。谢谢。