2009-09-28 2 views
3

Я видел пару веб-сайтов, которые имеют динамическую ссылку для скачивания.Динамический алгоритм загрузки ссылок

Они запрашивают действительный адрес электронной почты и отправляют динамически созданную ссылку для загрузки на этот адрес. E.X. www.mysite.domain/hashvalue1

Но как они это делают, поскольку файл существует в домене в определенном месте? www.mysite.domain/downloads

Есть ли какой-нибудь путеводитель по этому вопросу?

ответ

3

Да, URL-адрес сети не должен соответствовать фактическому местоположению файла. Самый простой способ реализовать это в .NET - это создать IHttpHandler, который использует Response.TransmitFile на основе хэш-значения.

В этом случае URL-адрес будет следующим: www.mysite.domain/file.ashx? Hash = hashvalue1.

Вы можете получить более качественные URL-адреса, если используете Routing (ASP.NET 3.5 SP1) или какой-либо URL-ревертер.

4

Они используют «UrlRewrite» и ASP.NET HttpHandler.

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

Handler: 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; } 
    } 
} 
0

Это не может быть наиболее эффективным и лучшим способом сделать, но может решить вашу проблему. У вас есть файл в определенном месте на сервере, и вы знаете его, когда пользователь нажимает или запрашивает загрузку. Вы получаете адрес электронной почты и вместе из имени файла или пути и электронной почты создаете хэш, вы можете добавить к нему соль, чтобы действительно рандомизировать его, даже если тот же пользователь снова и снова запрашивает один и тот же файл. Теперь поместите этот хеш, имя файла и соль (если есть) в таблицу базы данных. Вы также можете использовать дату и время для ссылки.

Вы можете отправить ссылку пользователя, подобную этой site.com/files.dld?hash, и реализовать IHttpHandler для обработки этого расширения (см. Этот answer автор: Андрей Щекин). Вот также article, описывающий использование HttpHandler для загрузки zip-файлов.