ASP.Net список файлов в каталоге + ссылка на файл - PullRequest
2 голосов
/ 12 мая 2011

Я создаю веб-форму, которая будет отображать список файлов исключений из каталога. Файлы отображаются правильно, однако ссылка не работает. Я провел несколько быстрых поисков решения, единственной проблемой является то, что большинство решений запрашивают, я настраиваю виртуальный каталог, однако сервер, на котором расположены эти файлы, не является веб-сервером. Вот код, который перечисляет файлы:

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

Проблема заключается в моем "href". Есть ли способ настроить эту ссылку без необходимости настройки виртуального каталога? Или, если мне нужно настроить один, сделать это через IIS Express?

Ответы [ 3 ]

2 голосов
/ 12 мая 2011

Вы не можете сделать это без виртуального каталога, если файлы не находятся на том же сервере, что и веб-сервер.Файлы необходимо доставлять клиентам через веб-сервер.

Хотя вы можете использовать IIS Express для создания виртуальных каталогов - посмотрите эту ветку обсуждения .Вам также может понадобиться включить внешний доступ к IIS Express ( этот пост в WebMatrix должен быть полезен в этом отношении).Примечание: при использовании виртуального каталога ваши URL должны использовать схему http: или https: вместо файла : .

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

1 голос
/ 12 мая 2011

Я думаю, что вы можете добиться этого, используя серверную часть загрузчика, которая может получить доступ к файлам для вас, а затем передать их через http.

httphandler, метод ProcessRequest которого может быть (очень упрощенно) подобен этому:

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();
    }   
}

тогда вы создадите ссылку, указывающую на ваш обработчик, с файлом в качестве параметра:

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/>";
}

Не забудьте настроить обработчик в web.config:

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

(Конечно, этот пример очень прост, и я думаю, что он полон ошибок, но просто чтобы прояснить ситуацию)

1 голос
/ 12 мая 2011

При обращении к локальной файловой системе вам необходимо отформатировать гиперссылки следующим образом:

Файл: /// C: /myfile.txt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...