2011-11-26 11 views
1

假设我的用户系统在我的Web服务器上有一堆PDF文档上传到我的Web服务器。 说他们是绝密或非常私人的;可能fx。成为薪水支票,客户合同或发票。在服务器上隐藏PDF文档,但登录的用户可以看到它们?

如何隐藏来自世界的PDF文档,但使其可见并可下载,以供登录到我的用户系统的用户使用?

这可能吗?

我正在使用SQL Server 2008和IIS7完全专用的Microsoft Web Server 2008。我是ASP Classic的服务器脚本。


是的,我一直在使用googling的情况,我真的找不到一个具体的例子如何做到这一点。这也让我相信,这是不可能的:/

+0

用户如何登录到您的系统?这是一个Intranet,并且是登录到Web服务器可识别的域的用户吗? – AnthonyWJones

+0

他们像在标准网站上那样登录,会话将检查您是否登录并使用了什么用户帐户。 – Behrens

回答

1

首先,您可以使用一些丑陋的ASP代码将PDF的内容泵送到客户端,但当您拥有可爱的现代服务器时,我不会用这种方式引导您。

希望你没有任何旧的ISAPI过滤器需要经典的管道。因此,您的应用程序池将运行集成管道。

我相信你可以使用ASP.NET global.asax页面过滤传入的请求,甚至对于集成管道中的静态内容。 AuthorizeRequest可能是放置代码的好地方。

您可能需要调整现有登录系统(可能取决于ASP会话),以便为登录请求的响应添加一个额外的会话cookie(您指定的名称和值)。

您可以将PDF文件放在应用程序的某个子文件夹下。您的Global.asax代码隐藏代码可以确定传入的请求是否用于该子文件夹,如果它可以检查请求中的cookie以确定您的会话cookie是否存在并且它具有有效值。

这有两个优点: -

  1. 它允许现有的静态内容处理程序提供实际的文件给客户,这将是比试图用代码来做到这一点更有效。
  2. 它使您的应用程序在ASP.NET世界中保持小脚。从这里您可以考虑使用ASP.NET来提供更多功能。
+0

我将来肯定会做更多的ASP.NET代码,但这是从ASP到ASP.NET的一大步。这就像学习一种全新的语言:)所以现在,这一步太大了。 ---我已经使用cookies来定义一个唯一的键字符串,该字符串在我的数据库中也被定义,以在会话过期时维持长时间的登录。 ---我的IIS7安装是一个默认的安装,没有被触及,所以我猜这里应该没有旧的ISAPI过滤器:) ---续... – Behrens

+0

......我的计划是把所有的文件放在服务器的D:驱动器,而Windows安装在C:驱动器上,这会妨碍你的方法吗? ---我不知道如何处理Global.asax以及写入内容,你能帮助吗? :) – Behrens

+0

你放置文件的地方并不重要。如果您选择不将它们放在应用程序的同一物理文件夹下,则可以将虚拟文件夹添加到网站,以便用户可以检索它们。 – AnthonyWJones

0

将它们放在域文件夹上的文件夹中。

+0

这是如何使这些文件可以被认证的用户访问,而不是其他人。 – AnthonyWJones

+0

我同意@AnthonyWJones在这里... – Behrens

+0

你可以检索物理文件路径 – Dee

0

您正在寻找的是能够将文件流式传输到浏览器。

http://support.microsoft.com/kb/276488

你可以通过这样在运行到一个问题是你的服务器的内存的限制。 ASP在发送它之前将整个文件加载到内存中。所以如果你使用非常大的文件来做这件事,你可能会遇到问题。

+0

如果我遇到这些问题,文件有多大? :) – Behrens

+0

@FoxInSocks:如果您关闭缓冲区,则不是,但当您这样做时,客户端端不再能够提供良好的进度信息。 – AnthonyWJones

相关问题