C# 将文件从内部服务器转发到HTTP请求

C# 将文件从内部服务器转发到HTTP请求,c#,asp.net,webforms,file-transfer,C#,Asp.net,Webforms,File Transfer,也许我的标题没有100%地反映出我的问题,但我会尽量让它更清楚。 我们有一个在internet上公开的Web服务器和一个可以访问文件服务器的Web服务器。我们希望在Web服务器上没有文件的情况下,客户端能够从文件服务器下载文件。是否有任何技术可用于此类请求? 我们正在使用ASP。NET网络表单 提前感谢。我不知道有哪种框架可以做到这一点,但我实现了类似的功能。在我们的例子中,我们有一个文件列表,用户应该能够在数据库中下载这些文件,但您只需使用System.IO.Directory查询特定文

也许我的标题没有100%地反映出我的问题,但我会尽量让它更清楚。

我们有一个在internet上公开的Web服务器和一个可以访问文件服务器的Web服务器。我们希望在Web服务器上没有文件的情况下,客户端能够从文件服务器下载文件。是否有任何技术可用于此类请求?
我们正在使用ASP。NET网络表单


提前感谢。

我不知道有哪种框架可以做到这一点,但我实现了类似的功能。在我们的例子中,我们有一个文件列表,用户应该能够在数据库中下载这些文件,但您只需使用System.IO.Directory查询特定文件夹中的可用文件即可。还要求应用程序在具有允许访问文件共享的标识(用户)的应用程序池中运行

实际下载是作为ASP.Net WebHandler(.ashx文件)实现的。当用户点击该处理程序时,我基本上会在ProcessRequest方法中执行以下操作:

string fileName = "\\\\myServer\\folder\\file.pdf";
byte[] fileContent = System.IO.File.ReadAllBytes(fileName);

context.Response.Clear();
context.Response.ClearHeaders();
context.Response.ClearContent();

context.Response.ContentType = "application/pdf";

context.Response.AddHeader("Content-Disposition", "attachment;filename=" + System.IO.Path.GetFileName(fileName));
context.Response.AddHeader("Content-Length", fileContent.Length.ToString());
context.Response.BinaryWrite(fileContent);
当然,如果您处理的是更大的文件,您可能不希望将整个文件加载到内存中,而是分块读取并多次调用BinaryWrite。您还应该将ContentType设置为适合您的文件类型的MIME类型,以便客户端浏览器能够正确处理它