使用C#和IIS 7保护大型下载

设置如下:

> 1台运行C#应用程序的Web服务器,我的用户(存储在该服务器上的MySQL数据库中)向其进行身份验证.
> 1个运行软件TBD的文件服务器.在过去,我使用lighttpd和mod_secdownload来保护文件服务器上的文件,并且效果很好.

我想知道是否有办法结合使用IIS和C#.Net.我所有其他服务器都在运行该组合,如果我可以对文件服务器执行相同的操作,则可以简化操作.最重要的是,正在托管的文件很大.我已经看到了一些使用小型应用程序来创建FileStream对象,读取文件并手动创建HTTP响应的示例.这行得通,但是由于我正在使用500 MB的文件,因此速度非常慢.而且我可能会立刻有300个用户点击框,请求文件.不好

那么,有人看到解决这个问题的方法吗?我正在尝试创建一个更加透明的系统,如果我所有的服务器都运行相同的软件/硬件,它将使我的生活变得更加简单.预先感谢您提供的任何建议!

最佳答案
你知道吗? KB文章是便便.这是我的官方建议:

public void StreamFile(string filePath)
{
    string fileName = Path.GetFileName(filePath);

    using (var fStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
    {
        var contentLength = fStream.Length;

        if (Request.UserAgent.Contains("MSIE"))
        {
            Response.AddHeader("Content-Transfer-Encoding", "binary");
        }

        Response.ContentType = "application/octet-stream";
        Response.AddHeader("Content-Length", contentLength.ToString());

        // Even though "Content-Disposition" should have an upper-case "d", as per http://www.ietf.org/rfc/rfc2183.txt
        // IE fails to recognize this if the "d" is upper-cased.
        Response.AddHeader("Content-disposition", "attachment; filename=" + fileName);

        var buffer = new byte[8192];

        while (Response.IsClientConnected)
        {
            var count = fStream.Read(buffer, 0, buffer.Length);
            if (count == 0)
            {
                break;
            }

            Response.OutputStream.Write(buffer, 0, count);
            Response.Flush();
        }
    }

    Response.Close();
}

转载注明原文:使用C#和IIS 7保护大型下载 - 代码日志