ASP.NET提供锁定文件的下载

时间:2013-10-22 18:45:56

标签: c# asp.net iis file-upload download

我一直在尝试一些方法,并得到这个。

我真正需要的是像Response.TransmitFile(或MVC File方法,它使用后面的TransmitFile)。但是使用FileShare.ReadWrite而不是Read。

我正在使用2GB文件进行测试。 TransmitFile没有内存或CPU占用空间。

我尝试做类似的事情,但我不知道我是否走在正确的道路上。此方法不消耗内存,但在峰值时消耗7%的cpu

    private void Download(string caminho)
    {
        const int tamanhoBuffer = 8192;
        Response.ContentType = "application/octet-stream";
        Response.AddHeader("Content-Disposition", "attachment; filename*=UTF-8''" + Path.GetFileName(caminho) + "");


        using (var fs = new FileStream(caminho, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        {
            Response.AddHeader("Content-Length", fs.Length.ToString());

            byte[] conteudo = new byte[tamanhoBuffer];
            int size;

            while (Response.IsClientConnected && (size = fs.Read(conteudo, 0, conteudo.Length)) > 0)
            {
                Response.OutputStream.Write(conteudo, 0, size);
                Response.Flush();
            }

            Response.End();
        }
    }

0 个答案:

没有答案