У меня есть веб-сайт, на котором есть куча PDF файлов, которые предварительно создаются и сидят на веб-сервере.
Я не хочу, чтобы пользователь просто вводил URL-адрес и получал PDF файл (т.е. http://MySite/MyPDFFolder/MyPDF.pdf)
Я хочу разрешить просмотр только при загрузке и отображении их.
Я уже делал что-то подобное раньше. Я использовал PDFSharp для создания PDF файла в памяти, а затем загружал его на страницу следующим образом:
protected void Page_Load(object sender, EventArgs e)
{
try
{
MemoryStream streamDoc = BarcodeReport.GetPDFReport(ID, false);
// Set the ContentType to pdf, add a header for the length
// and write the contents of the memorystream to the response
Response.ContentType = "application/pdf";
Response.AddHeader("content-length", Convert.ToString(streamDoc.Length));
Response.BinaryWrite(streamDoc.ToArray());
//End the response
Response.End();
streamDoc.Close();
}
catch (NullReferenceException)
{
Communication.Logout();
}
}
Я пытался использовать этот код для чтения из файла, но не мог понять, как заставить MemoryStream читать в файле.
Мне также нужен способ сказать, что путь "/MyPDFFolder" не просматривается.
Спасибо за любые предложения
Загрузка файла PDF с диска в буфер:
byte [] buffer;
using(FileStream fileStream = new FileStream(Filename, FileMode.Open))
{
using (BinaryReader reader = new BinaryReader(fileStream))
{
buffer = reader.ReadBytes((int)reader.BaseStream.Length);
}
}
Затем вы можете создать свой MemoryStream
следующим образом:
using (MemoryStream msReader = new MemoryStream(buffer, false))
{
// your code here.
}
Но если у вас уже есть данные в памяти, вам не нужен MemoryStream
. Вместо этого сделайте следующее:
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Length", buffer.Length.ToString());
Response.BinaryWrite(buffer);
//End the response
Response.End();
streamDoc.Close();
Все, что отображается на экране пользователя, может быть захвачено. Вы можете защитить исходные файлы с помощью браузера в формате PDF, но вы не можете запретить пользователю делать снимки данных.
Что касается сохранения исходных файлов в безопасности... если вы просто храните их в каталоге, который не находится под вашим веб-корнем..., который должен сделать трюк. Или вы можете использовать файл .htaccess для ограничения доступа к каталогу.
Код Keltex работает для ограничения того, кто может попасть в файл. Если пользователь не авторизовался для определенного файла, дайте им страницу с сообщением об ошибке, иначе используйте этот код для передачи им PDF. Затем URL-адрес не будет напрямую связан с PDF файлом, а скорее script, поэтому вы получите 100% -ный контроль над тем, кому разрешено его получать.
Вместо того, чтобы помещать рассматриваемые PDF файлы в доступное местоположение и возиться с конфигурацией, чтобы скрыть их, вы можете разместить их где-нибудь на сервере, который не доступен непосредственно в Интернете. Поскольку у вас будет код, читающий файл в буфер и передающий его пользователю, в любом случае, не имеет значения, где на сервере находится файл, если он доступен для вашего кода.