2008-10-07 61 views
1

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

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

当用户单击链接时然后提示下载) 将文档复制到服务器(A),然后重定向到浏览器提示他们下载的页面。我相信我已经正确设置了内容标题,并且它在FireFox中有效。 (7)只是弹出一个窗口,然后窗口消失,如果我拒绝安全设置它工作正常,但这不是一个选项。

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

此外:是的服务器B也是一个Web服务器

回答

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连接(从服务器a到服务器b并将HTTP响应复制到服务器a的响应)发生的。

让我知道你是否需要任何帮助。

0

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

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

  1. 用户通过点击链接请求的文件
  2. 请求被发送到服务器A,它通过AJAX禁用链接
  3. 服务器A将文件复制到从服务器B的临时目录
  4. 服务器A发送回一个链接到文件中的临时文件夹

如果文档服务器不是网络服务器(SMB,AFS,NFS等),这将工作。

+0

“任何想法如何解决这个问题。我不能直接指向服务器(B)上的文档”,因为这最后一句话不能完成。 – 2008-10-07 11:26:18

+0

这非常糟糕,因为它依赖于不必要的操作,例如禁用链接。您可以轻松点击链接下载文件,然后使用该文件进行响应,无需使用所有AJAX。无论如何,浏览器将在等待响应时被锁定。 – 2008-10-08 11:10:10