我看到过一些网站有动态下载链接。
它们会要求输入有效的电子邮件地址并将动态创建的下载链接发送到该地址。 例如:www.mysite.domain/hashvalue1
但是他们如何做到这一点,因为文件存在于特定位置上的域名中? 例如:www.mysite.domain/downloads
有没有关于此的指南?
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; }
}
}
是的,Web URL不必对应实际的文件位置。
在.NET中实现这个最简单的方法是创建一个IHttpHandler,它使用基于哈希值的Response.TransmitFile。
在这种情况下,URL将是www.mysite.domain/file.ashx?hash=hashvalue1。
如果使用Routing(ASP.NET 3.5 SP1)或某种URL重写程序,则可以获得更好的URL。
这可能不是最有效或最好的方法,但可以解决您的问题。您在服务器上的特定位置有一个文件,并且当用户单击或请求下载时,您会知道它。您获取电子邮件地址,并从文件名或路径和电子邮件一起创建哈希,您可以添加一些盐来真正随机化它,即使同一用户再次请求相同的文件。现在将此哈希、文件名和盐(如果有)放入数据库表中。您还可以为链接设置过期日期时间。
您可以像这样发送用户链接 site.com/files.dld?hash 并实现 IHttpHandler 来处理此扩展名(请参见 Andrey Shchekin 的 answer)。这里还有一篇 article 描述了使用 HttpHandler 提供 zip 文件下载。