Asp.net - предотвращение загрузки файлов (PDF, Word) из определенной папки - PullRequest
2 голосов
/ 30 ноября 2011

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

Допустим, пользователь сохраняет свое резюме с именем 123.pdf и хранится в cv / 123.pdf. Как я могу предотвратить загрузку pdf-файла в окне браузера или загрузку на компьютер пользователя, если они введут 'http://mydomain.com/cv/123.pdf'?

Я использую проверку подлинности с помощью форм, поставщиков членства и ролей Asp.Net, Asp.net 4 на сервере IIS6.

Ответы [ 3 ]

4 голосов
/ 30 ноября 2011
  1. Создайте папку, которая находится за пределами иерархии основной папки www, используемой сайтом (поэтому к ней нельзя получить прямой доступ через URL-адрес)скачать файл.Логика в файле ashx может проверить, авторизован ли пользователь для загрузки файла или нет.

Ссылки ASHX: 1 , 2 , 3

4 голосов
/ 30 ноября 2011

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

Например, вы можете хранить файлыв вашем /uploads/xyz123/ каталоге.Затем, чтобы загрузить файл, скажем, myresume.pdf, пользователь должен будет перейти на http://yourserver/download.aspx?file=myresume.pdf.

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

Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment; filename=" + filename);
Response.AddHeader("content-length", binaryStream.Length.ToString);
Response.BinaryWrite(binaryStream.ToArray());
Response.Flush();
Response.End();

Ни один пользователь никогда не узнает, где на самом деле хранятся файлы.

3 голосов
/ 30 ноября 2011

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

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

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