2009-09-28 5 views
3

J'ai vu quelques sites Web qui ont un lien de téléchargement dynamique.Algorithme de lien de téléchargement dynamique

Ils demandent une adresse e-mail valide et envoient le lien de téléchargement créé dynamiquement à cette adresse. E.X. www.mysite.domain/hashvalue1

Mais comment font-ils cela, puisque le fichier existe sur le domaine dans un emplacement spécifique? www.mysite.domain/downloads

Y at-il un guide autour de cela?

Répondre

3

Oui, l'URL Web ne doit pas correspondre à l'emplacement réel du fichier. La façon la plus simple d'implémenter ceci dans .NET est de créer un IHttpHandler qui utilise Response.TransmitFile en fonction de la valeur de hachage.

Dans ce cas, l'URL serait www.mysite.domain/file.ashx? Hash = hashvalue1.

Vous pouvez obtenir de meilleures URL si vous utilisez le routage (ASP.NET 3.5 SP1) ou une sorte de réécriture d'URL.

4

Ils utilisent "UrlRewrite" et un HttpHandler ASP.NET.

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

Cela peut ne pas être le plus efficace ou la meilleure façon de le faire, mais peut résoudre votre problème. Vous avez un fichier à un emplacement spécifique sur le serveur et vous le savez lorsque l'utilisateur clique ou demande à télécharger. Vous obtenez une adresse e-mail et, à partir du nom du fichier ou du chemin et de l'email, vous pouvez ajouter un peu de sel pour vraiment le rendre aléatoire même si le même utilisateur demande le même fichier encore et encore. Maintenant, mettez ce hash, nom de fichier et sel (si vous en avez un) dans une table de base de données. Vous pouvez également avoir une date-heure d'expiration pour le lien.

Vous pouvez envoyer un lien utilisateur comme celui-ci site.com/files.dld?hash et implémenter IHttpHandler pour gérer cette extension (voir ce answer par Andrey Shchekin). Voici également un article décrivant l'utilisation de HttpHandler pour fournir le téléchargement de fichiers zip.