Список файлов, доступных для скачивания - файлы хранятся в месте, доступном только для приложения - PullRequest
2 голосов
/ 10 февраля 2009

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

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

 Response.ContentType = "Application/pdf"
 Response.AppendHeader("Content-Disposition", "attachment; filename=<some file name>")
 Response.TransmitFile(Server.MapPath("<the file path>"))
 Response.End()

Все работает нормально, если я имею дело с одним файлом

Проблема:

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

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

Что-то вроде

File name 1, some description 1, download (button, link?)
File name 2, some description 2, download (button, link?)

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

Каким было бы элегантное решение для достижения этой цели с помощью .net2.0?

Ответы [ 2 ]

8 голосов
/ 10 февраля 2009

В обычном ASP.NET (2.0) вы захотите создать «обработчик». Самый простой вариант - добавить шаблон «универсального обработчика» (ashx), а затем разместить на странице обычную ссылку, например, на «download.ashx? Id = 2».

Внутри обработчика проанализируйте строку запроса и передайте файл пользователю:

    public void ProcessRequest(HttpContext context)
    {
        // set headers...
        string filePath = FindPath(context.Request.QueryString("id"));
        context.Response.WriteFile(filePath);
    }

где FindPath разрешает физический файл по ссылке на строку запроса.

Если бы это был ASP.NET MVC, вы могли бы просто использовать File(path) action-result.

0 голосов
/ 10 февраля 2009

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

...