动态下载链接算法

时间:2009-09-28 08:25:06

标签: asp.net vb.net download

我见过几个有动态下载链接的网站。

他们要求提供有效的电子邮件地址,并将动态创建的下载链接发送到该地址。 E.X. www.mysite.domain / hashvalue1

但他们是如何做到这一点的,因为该文件存在于特定位置的域中? www.mysite.domain /下载

有没有关于此的指南?

3 个答案:

答案 0 :(得分:4)

他们使用“UrlRewrite”和ASP.NET HttpHandler。

UrlRewrite:http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

处理程序:Downlaod.ashx

using System;
using System.Web;

public class GetDownload : IHttpHandler 
{
    private static string file = "your file location";
    public void ProcessRequest (HttpContext context) 
    {
        if(UsersHasRights(context)) 
        {
            context.Response.TransmitFile(file);
        }
    }

    public bool IsReusable 
    {
        get { return false; }
    }
}

答案 1 :(得分:3)

是的,Web URL不必与实际文件位置相对应。 在.NET中实现这一点的最简单方法是创建一个IHttpHandler,它使用基于哈希值的Response.TransmitFile。

在这种情况下,URL将是www.mysite.domain / file.ashx?hash = hashvalue1。

如果使用路由(ASP.NET 3.5 SP1)或某种URL重写器,则可以获得更好的URL。

答案 2 :(得分:0)

这可能不是最有效或最好的方法,但可以解决您的问题。您在服务器上的特定位置有文件,并且在用户单击或请求下载时您就知道它。您可以从文件名或路径和电子邮件创建哈希获得电子邮件地址,即使相同的用户一次又一次地请求相同的文件,您也可以添加一些盐来真正随机化它。现在将这个哈希,文件名和盐(如果有的话)放入数据库表中。您也可以使用过期日期 - 链接。

您可以发送此site.com/files.dld?hash之类的用户链接,并实施IHttpHandler来处理此扩展程序(请参阅此安德烈·谢切金的answer)。这里还有一个article,描述了使用HttpHandler来提供zip文件的下载。