2 votes

ASP.Net : liste de fichiers dans un répertoire + lien vers le fichier

Je crée un formulaire Web qui affichera une liste de fichiers d'exception dans un répertoire. Les fichiers s'affichent correctement, mais le lien ne fonctionne pas. J'ai fait quelques recherches rapides pour trouver une solution, le seul problème est que la plupart des solutions demandent que je configure un répertoire virtuel, mais le serveur sur lequel ces fichiers sont situés n'est pas un serveur web. Voici le code qui liste les fichiers :

var exDir = @"\\Server\folder\Exception";
        exLabel.Text = "";
        foreach (string exFile in Directory.GetFiles(exDir))
        {
            exLabel.Text += @"<a href='file:"+exFile+"'> "+exFile+" </a><br/>";
        }

Le problème réside dans mon "href". Existe-t-il un moyen de configurer ce lien sans avoir à configurer un répertoire virtuel ? Ou, si je dois en configurer un, le faire via IIS Express ?

2voto

dariom Points 3304

Vous ne pouvez pas le faire sans répertoire virtuel si les fichiers ne résident pas sur le même serveur que le serveur web. Les fichiers doivent être servis aux clients via un serveur web.

Bien que vous puissiez utiliser IIS Express pour créer des répertoires virtuels - jetez un coup d'oeil à ce fil de discussion . Vous pouvez également avoir besoin d'activer l'accès externe à IIS Express ( cet article sur WebMatrix devrait être utile à cet égard). Remarque : si vous utilisez un répertoire virtuel, vos URL devront utiliser l'extension http : o https : au lieu de fichier : .

Une autre approche consisterait à télécharger les fichiers que vous souhaitez partager vers un emplacement sur le serveur web et à les servir à partir du serveur web.

1voto

DaveRead Points 2572

Si vous faites référence au système de fichiers local, vous devez formater les hyperliens comme suit :

fichier:///c:/monfichier.txt

1voto

tanathos Points 4145

Je pense que vous pouvez y parvenir en utilisant un téléchargeur côté serveur, qui peut accéder aux fichiers pour vous et les servir via http.

Un httphandler, dont la méthode ProcessRequest pourrait être (très simplifiée) comme ceci :

public void ProcessRequest(HttpContext context)
{
    if (context.Request.Params["file"] != null)
    {   
            string filename = context.Request.Params["file"].ToString();

        context.Response.Clear();
        context.Response.ClearContent();
        context.Response.ClearHeaders();
        context.Response.Buffer = true;

        FileInfo fileInfo = new FileInfo(filename);

        if (fileInfo.Exists)
        {
            context.Response.ContentType = /* your mime type */;
            context.Response.AppendHeader("content-disposition", string.Format("attachment;filename={0}", fileInfo.Name));
            context.Response.WriteFile(filename);
        }

        context.Response.End();
    }   
}

puis vous construirez le lien pour pointer votre gestionnaire avec le fichier comme paramètre :

var exDir = @"\\Server\folder\Exception";
DirectoryInfo dir = new DirectoryInfo(exDir);

foreach (FileInfo exFile in dir.GetFiles())
{
    exLabel.Text += @"<a href='downloader.ashx?file="+ exFile.Name + "'> "+exFile.FullName+" </a><br/>";
}

N'oubliez pas de configurer le gestionnaire dans le web.config :

<system.web>
    <httpHandlers>
        ...
        <add verb="*" path="downloader.ashx" type="YourNamespace.downloader"/>
    </httpHandlers>
</system.web>

(Bien sûr, cet exemple est très simple et je pense qu'il est truffé d'erreurs, mais c'est juste pour clarifier la situation).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X