0

我们有一个 ZIP 文件库,希望在 ASP.NET 站点上可供下载。

这些文件位于可从外部网络场访问的 NAS 设备上。

这是我们最初的策略:

  1. 将 IIS 虚拟目录映射到路径 /zipfiles 处的共享驱动器
  2. 用户可以在给定 URL 后下载 zip 文件

但是,如果用户共享文件的链接,任何人都可以下载它们。相反,我们希望在我们的站点中使用 ASP.NET 表单身份验证来在启动文件传输之前验证用户的请求。

一些问题: 对 zip 文件的请求由 IIS 处理,而不是 ASP.NET。所以它不受表单身份验证的约束。此外,我们不希望 ASP.NET 处理该请求,因为它占用了一个 ASP.NET 线程并且对于下载大文件是不可扩展的。因此,配置 asp.net dll 来处理 *.zip 请求不是一种选择。

对此有什么想法吗?

我们折腾的一个想法是:下载的初始请求将是一个 ashx 处理程序。此处理程序将在身份验证后生成一个下载令牌,该令牌保存到数据库中。然后,用户被重定向到在QueryString 中附加了令牌的文件(例如/files/xyz.zip?token=123456789)。ISAPI 插件将用于检查令牌。此外,令牌将在 x 时间后过期。对此有什么想法吗?我还没有实现 ISAPI 插件,所以我不确定这是否会起作用。

我想避免自定义编码,因为安全是一个问题,我更喜欢使用经过时间考验的解决方案。

4

2 回答 2

0

没有 ASP.NET 就无法进行表单身份验证。

如果您根本不想使用 ASP.NET,您可以在文件上定义 NTFS 权限并为您的用户创建域帐户。那将很快成为一场噩梦。

要处理 ASP.NET 的大量下载,您可以查看Comet。这基本上是一个IHttpHandler,但您需要使用另一个 ThreadPool(不是 ASP.NET)。我建议看看Smart Thread Pool

几个月前我将两者结合起来创建了一个下载速度限制的应用程序,现在运行非常流畅。

于 2010-02-08T22:22:39.787 回答
0

我阅读并理解您对使用处理程序管理静态文件的担忧,但如果您使用异步处理程序,那么您将不会被阻塞。

我认为您可能会以合理的价格获得所需的结果。

于 2010-02-28T21:14:33.550 回答