【问题标题】:Forward files from internal server to HTTP request将文件从内部服务器转发到 HTTP 请求
【发布时间】:2016-03-24 01:57:52
【问题描述】:

也许我的标题不能 100% 反映我的问题,但我会尽量让它更清楚。 That is how our system is right now.

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

提前致谢。

【问题讨论】:

    标签: c# asp.net webforms file-transfer


    【解决方案1】:

    我不知道有什么框架可以做到这一点,但我实现了类似的东西。在我们的例子中,我们有一个用户应该能够在数据库中下载的文件列表,但您可以简单地使用 System.IO.Directory 自己查询某个文件夹中的可用文件。还要求应用程序在具有允许访问文件共享的身份(用户)的应用程序池中运行。

    实际下载是作为 ASP.Net WebHandler (.ashx-File) 实现的。当用户点击那个处理程序时,我基本上在 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-Type,以便客户端浏览器正确处理它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 2012-03-23
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 2018-03-02
      相关资源
      最近更新 更多