Генерация файла, затем запуск безопасной загрузки - PullRequest
2 голосов
/ 07 апреля 2009

Работая в среде asp.net 2.0 (VB), у меня уже есть код, который может генерировать файл Excel из базы данных для конкретного «пользователя» веб-сайта. Я хочу иметь возможность запускать этот генератор отчетов по требованию, а затем после того, как файл будет сгенерирован, разрешить пользователю загрузить этот файл.

Как я могу сделать это безопасно, а не просто сбросить файлы в какой-нибудь общедоступный каталог?

Примечание: относится к этому вопросу , но на ту часть, которая мне действительно интересна, так и не был дан ответ.

Ответы [ 3 ]

4 голосов
/ 07 апреля 2009

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

Вы можете создать обработчик, скомпилировав и зарегистрировавшись в web.config или создав страницу ashx. Затем ваша страница авторизует пользователя, а затем записывает содержимое в ответ.

Если вам нужно состояние сеанса, обязательно наследуйте от IRequiresSessionState.

Редактировать

Я парень на C #, вот пример:

public class DownloadFile : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{

    public void ProcessRequest (HttpContext context) {
    //Validate user is authenticiated and authorized.
    if (context.Request.IsAuthenticated)
    {
         //This is your own custom authorization mechanism
         if (AuthorizeUser(context.Request.User))
         {
            //not sure what the correct content type is. This is probally wrong
            context.Response.ContentType = "application/xls";
            //Setting size is optional               
            context.Response.AddHeader("Content-Disposition",
               "attachment; filename=" + downloadName + "; size=" +               myExcellFile.Length.ToString());
            context.Response.BinaryWrite(myExcellFile);


         }

    }
3 голосов
/ 07 апреля 2009

Используйте обработчик Http (* .ashx файл). Переместите свой код, чтобы сгенерировать файл в обработчик, проверьте безопасность там до генерации файла, установите соответствующий заголовок типа контента и расположения контента и используйте Response.BinaryWrite для отправки Ваш файл прямо в браузер. Никогда не помещайте его в файловую систему вашего сервера.

0 голосов
/ 07 апреля 2009

Можете ли вы ...?

  1. Создайте файл Excel в личной (не доступной для пользователя) папке
  2. Вернуть пользователю уникальный URL-адрес, связанный с таблицей Excel (что-то, что не так просто угадать)
  3. Обработка этого URL-запроса в вашем приложении и передача электронной таблицы Excel вызывающей стороне (соответственно изменяя тип содержимого ответа)

Это позволит вам сократить время ожидания этих URL-адресов или даже при необходимости восстановить таблицу Excel на лету.

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