从外部从内部服务器下载文档

时间:2008-10-07 11:12:30

标签: c# asp.net iis reverse-proxy

这有点奇怪......我们有一个在服务器(A)上运行的内部Web应用程序和在服务器(B)上运行的文档存储库。

我在页面上有简单的链接,我想让用户下载文档(来自IIS服务器(A))。但是,在用户单击按钮之前,此文档在服务器(A)上不存在(因为当页面加载时,有40多个要显示的文档无法加载它们)

当用户点击链接时(此时我希望提示下载) 文档将复制到服务器(A),然后重定向到浏览器提示他们下载的页面。我相信我已经正确设置了内容标题,它可以在FireFox中使用。

IE(7)只是弹出一个窗口然后窗口消失,如果我关闭安全设置它可以正常工作,但这不是一个选项。

任何想法如何解决这个问题。我不能直接指向服务器(B)上的文档

附加:是服务器B也是Web服务器

2 个答案:

答案 0 :(得分:5)

如果世界可以看到服务器A而服务器A可以看到服务器B.我建议设置反向代理。

http://www.codeplex.com/urlrewriter

基本上这样做可以让世界从服务器B下载,但只能通过反向代理。您可以使用以下规则为此库创建反向代理接口。

RewriteRule ^ / download /(.*) http://server-b/download/ $ 1 [NC,P]

所以在

的情况下

http://server-a/download/xyz.pdf

它实际上会从

请求它

http://server-b/download/xyz.pdf

但是它会像来自服务器-a一样被传递,这在技术上是由反向代理创建一个Web连接,从server-a到server-b并将HTTP响应复制到服务器的响应 - 一个。

如果您需要帮助,请告诉我。

答案 1 :(得分:0)

你能用ajax吗?例如,用户单击发送请求以将文件从B获取到A并且微调器显示在页面上的按钮。然后在复制完成后,禁用微调器并为用户提供下载链接。

我被拒绝了,没有评论权限,所以我想我会详细说明(也许这只是一个可怕的解决方案,我看不到它):

  1. 用户通过点击链接
  2. 请求文件
  3. 请求被发送到服务器A并且它通过ajax
  4. 禁用链接
  5. 服务器A将文件复制到服务器B的临时目录
  6. 服务器A发送回临时文件夹
  7. 中文件的链接

    如果文档服务器不是Web服务器(SMB,AFS,NFS等),这将有效。