C# ASP.NET提供锁定文件的下载
我一直在尝试一些方法,得到了这个 我真正需要的是Response.TransmitFile(或MVC文件方法,它在后面使用TransmitFile)。但是使用FileShare.ReadWrite而不是Read 我正在使用2GB文件进行测试。传输文件没有内存或CPU占用空间 我试图做一些类似的事情,但我不知道我是否在正确的道路上。此方法不消耗内存,但在峰值时消耗7%的cpuC# ASP.NET提供锁定文件的下载,c#,asp.net,iis,file-upload,download,C#,Asp.net,Iis,File Upload,Download,我一直在尝试一些方法,得到了这个 我真正需要的是Response.TransmitFile(或MVC文件方法,它在后面使用TransmitFile)。但是使用FileShare.ReadWrite而不是Read 我正在使用2GB文件进行测试。传输文件没有内存或CPU占用空间 我试图做一些类似的事情,但我不知道我是否在正确的道路上。此方法不消耗内存,但在峰值时消耗7%的cpu private void Download(string caminho) { const
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();
}
}
为什么您希望正在下载的文件可供写入?您希望下载会发生什么情况?问题是,我需要发送一个已由用户打开的文件。如果该文件已由任何用户打开,并且该用户正在进行更改,则您不应使其可供下载。是的,我知道。但我们使用的是DWF viewer,它会获得写锁定,即使它是只读应用程序。为了安全起见,您应该使用该文件的副本进行下载。